我有两个测试类:


import java.util.Arrays;
import java.util.List;
import java.util.function.ToIntFunction;
import java.util.stream.IntStream;
import java.util.stream.Stream;class Age{private int age;public Age(int age){this.age = age;}public int getAgeValue(){return this.age;}
}@SuppressWarnings("unused")
class User{private int id;private String name;private Age age;public User(int id, String name, int age){this.id = id;this.name = name;this.age = new Age(age);}public Age getAge(){return this.age;}public int getAgeWrapper(){return this.age.getAgeValue();}}

先构造一个集合Collections:

private static List<User> users = Arrays.asList( new User(1, "张三", 1),  new User(2, "李四", 2),  new User(3,"王五", 3),  new User(4, "赵六", 4));

// 获得一个并行流:

Stream userStream = users.parallelStream();

// 获得一个映射函数,该函数配合stream使用,能把所有User实例的Age字段映射成IntStream

ToIntFunction mapper = User::getAgeWrapper;

IntStream intstream = userStream.mapToInt(mapper);

// 得到输出:10

System.out.println("Total: " + intstream.sum());

如果重复调用sum:

System.out.println("Total2: " + intstream.sum());

会遇到错误消息:

Exception in thread “main” java.lang.IllegalStateException: stream has already been operated upon or closed
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:491)
at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:449)
at java8.stream.SumTest.main(SumTest.java:68)

如果不想用stream自带的sum方法,也可以手动用reduce计算:

int total = intstream.reduce(0, (x, y) -> x + y);

一样能得到10的结果。

全部测试代码:

package java8.stream;import java.util.Arrays;
import java.util.List;
import java.util.function.ToIntFunction;
import java.util.stream.IntStream;
import java.util.stream.Stream;class Age{private int age;public Age(int age){this.age = age;}public int getAgeValue(){return this.age;}
}@SuppressWarnings("unused")
class User{private int id;private String name;private Age age;public User(int id, String name, int age){this.id = id;this.name = name;this.age = new Age(age);}public Age getAge(){return this.age;}public int getAgeWrapper(){return this.age.getAgeValue();}}
public class SumTest {private static List<User> users = Arrays.asList( new User(1, "张三", 1),  new User(2, "李四", 2),  new User(3,"王五", 3),  new User(4, "赵六", 4));public static String covert2SnakeCase(final String camelCase){final String regex = "([a-z])([A-Z])";final String replacement = "$1_$2";return camelCase.replaceAll(regex, replacement).toLowerCase();}public static void main(String[] args) {//double sum = users.parallelStream().mapToInt(User::getAge).getAgeValue().reduce(0, (x, y) -> x + y); double sum2 = users.parallelStream().mapToInt(User::getAgeWrapper).sum(); double sum = 0;Stream<User> userStream = users.parallelStream();ToIntFunction<User> mapper = User::getAgeWrapper;IntStream intstream = userStream.mapToInt(mapper);int total = intstream.reduce(0, (x, y) -> x + y);System.out.println("sum: " + total);// System.out.println("Total: " + intstream.sum());//System.out.println("Total2: " + intstream.sum());System.out.println("sum1: " + sum);//System.out.println(" sum2: " + sum2);System.out.println(covert2SnakeCase("helloJerry"));System.out.println(covert2SnakeCase("CongratulationsJerry"));}}

利用Java流进行类的整型字段求和的例子相关推荐

  1. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  2. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  3. [初级]Java中的switch对整型、字符型、字符串的具体实现细节

    转载自 [初级]Java中的switch对整型.字符型.字符串的具体实现细节 Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样 ...

  4. 利用java.io.File类实现遍历本地磁盘上指定盘符或文件夹的所有的文件

    2016-11-18 这是本人的第一篇随笔博客,纠结了半天还是选择自己学的时候比较用心的一些知识点上.利用java.io.File类指定本地的文件夹进行遍历所有的文件. package org.lxm ...

  5. SQL 查询整型字段值和十六进制相互转换

    数据库中存储是整型字段,有时展示需要转换为十六进制数据显示,这样就方便分析,例如MAC地址,固件版本信息. 1. 使用CONVERT函数 将整型数值转换为十六进制数据 SELECT CONVERT(V ...

  6. java swap函数_Java 利用swap函数交换两个整型数据值

    提到交换两个数a, b的值,一定可以想起很多方法,a = a+b;b = a - b; a = a - b;借助temp的方法等等,但是如果食用swap方法的话,这个问题可是很有研究的了,要求使用sw ...

  7. jpa vue管理系统_如何通过利用Java流获取类型安全和直观的Hibernate / JPA查询

    jpa vue管理系统 大部分Java数据库应用程序都在使用Hibernate / JPA来弥合Java和SQL之间的鸿沟. 直到最近,我们还被迫将Java和JPQL混合使用,或者使用复杂的命令式标准 ...

  8. Java 字节数组(byte[])和整型(int)的相互转换

    文章目录 前言 一.int 转换为 byte[] 二.测试代码 三.测试 四.byte[] 转换为 int 总结 前言 恰巧碰到了字节数组和整型的转换问题,特在此总结一下.将 int 按照小端法映射到 ...

  9. java中怎么输入长整型_c语言如何输入长整型 scanf输入长整型

    C语言中无符号长整型数的输入输出格式是什么? 整数变量的分类:basic integer:int short integer:short int long int将修饰符unsigned添加到上述三个 ...

最新文章

  1. 外国教授在B站当UP主上课,网友直呼好家伙:滑铁卢大学《差分隐私》课程上线...
  2. Android众说纷纭分辨率
  3. C++ 备忘录 ( 持续更新中... )
  4. python异常处理_Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化...
  5. [剑指offer]面试题第[28]题[Leedcode][JAVA][第101题][对称二叉树][队列][递归]
  6. 周鸿祎重申360不依靠弹窗广告盈利 增值服务是主要模式
  7. 服装企业的信息管理及主要对象(转)
  8. C#-is and as
  9. 驰骋工作流引擎表单设计器--表单装载前数据填充
  10. 如何搭建靠谱的测试环境
  11. surfacepro4黑苹果触屏_surface pro 4 黑苹果 (surface book 1适用)
  12. [量化学院]基于协整的配对交易
  13. 员工符合签订无固定期限劳动合同的条件,这种情况单位有权不予续签吗?
  14. 你需要一个什么样的网站开发流程?
  15. 汉罗塔汉洛塔c++,看不懂ni打我
  16. 企业债拟引入大数据强化信用约束
  17. 银行制定快捷支付限额原因
  18. chrome浏览器删除一些自动出现的书签
  19. 移动MAS短信接口工具类
  20. Screen Wonders for Mac (3D动态视频壁纸) v1.9.1

热门文章

  1. 树的存储结构以及实现代码
  2. 配置linux服务器做简单的路由器
  3. 2008年初看的书[带简评]
  4. C语言结构体实现类似C++的构造函数
  5. 035-OpenStack 关闭安全组
  6. 获取列表中的最大的N项和最小的N项
  7. ajax接收到的数据是一个页面的代码的原因
  8. HDU4669_Mutiples on a circle
  9. arm 指令1(转)
  10. jquery 控制模板菜单样式