Java 8 Stream API features --- map/reduce methods
来源:互联网 发布:jira mac 破解版下载 编辑:程序博客网 时间:2024/06/05 04:18
在 jdk 1.8 里面新增加了 Stream API ,为了去更高效的处理 huge data。那么怎么使用这些 API 呢,一点一点了解,先走马观花看一遍:
要做的事情是先把每个 element * 2 , 然后再相加。
public static void main(String... args){ List<Integer> values = Arrays.asList(1,2,3,4); System.out.println(values.stream().map(i -> i*2).reduce(0,(c,e) -> c+e));}
现在开始拆分:
values.stream() 是把 List 转换成 Stream ,它是 Collection interface 里新加入的一个 default method , since 1.8 :
所以我们可以先这么写,把它拆分开来后面再合并到一起。
Function<Integer,Integer> f = new Function<Integer, Integer>() { @Override public Integer apply(Integer i) { return i * 2; } }; Stream<Integer> s = values.stream(); Stream<Integer> s1 = s.map(f);// map will take a value,it will convert that value into the specified output you need .//这里的 map 接收的 value 就是 Function,所以这里可以写一个 Function ,它是一个functional interface,这就意味着可以把它用 lambda expression 把它替换掉 ,然后它返回的也是一个 Stream。可以看一眼。
Stream<Integer> s1 = s.map(i -> i*2);
再看后面的 reduce method .这个 method 有三种重载形式, 这里用到它接收一个BinaryOperator的参数,和上面的 Function 在同一个package,可以再把它分出来:
Function<Integer,Integer> f = new Function<Integer, Integer>() { @Override public Integer apply(Integer i) { return i * 2; } }; BinaryOperator<Integer> b = new BinaryOperator<Integer>() { @Override public Integer apply(Integer i, Integer j) { return i + j; } }; Stream<Integer> s = values.stream(); Stream<Integer> s1 = s.map(f); Integer result = (Integer)s1.reduce(0,b);
再用 lambda expression 把上面的 b 替换掉:
public static void main(String... args){ List<Integer> values = Arrays.asList(1,2,3,4); System.out.println(values.stream().map(i -> i*2).reduce(0,(c,e) -> c+e)); Stream<Integer> s = values.stream(); Stream<Integer> s1 = s.map(i -> i*2); Integer result = (Integer)s1.reduce(0,(c,e) -> c+e); System.out.println(result); }
可以再写得好看点,并且用 Integer.sum()将 c+e替换掉。
System.out.println(values.stream() .map(i -> i*2) .reduce(0,(c,e) -> Integer.sum(c,e)));
不会无缘无故这么写的,因为可以用 method reference 把它再替换掉:
System.out.println(values.stream() .map(i -> i*2) .reduce(0,Integer::sum));
是不是又简洁多了,awesome !
想象一下同样实现相同的功能,用 Jdk 1.7以前的代码,要写多少行呢。
更多可以参考这里:http://docs.oracle.com/javase/8/docs/api/
0 0
- Java 8 Stream API features --- map/reduce methods
- Java 8 Stream API features --- filter/reduce & predicate Interface test method
- Java 8 Stream API Features Intermediate operations & Terminal operations
- map-reduce Java API操作及map reduce的配置
- Java8-Stream operation map,reduce
- java8 Stream API之reduce
- Java 8 Stream API
- Java 8 Stream API
- str-api && map()、reduce()
- Map/Reduce API 样例一
- Map/Reduce API样例二
- Java 8: Stream map method
- Java 8 Stream API详解
- Spark RDD---api(map&reduce)
- Java 8系列之Stream中万能的reduce
- Stream ApI--3.map,flatmap
- JAVA 8 Stream API 对Stream进行分组、分区
- Java 8新特性:Stream API
- Sass学习之路(8)——拓展/继承/占位符
- 利用securecrt在linux与windows之间传输文件
- printf 打印
- java线程死锁
- 安卓判断当前网络状态
- Java 8 Stream API features --- map/reduce methods
- 使用JProfiler排查远程应用性能问题
- Android 自定义view之后只能监听到MotionEvent.ACTION_DOWN的解决办法
- 简单轮播图
- (PHPSInorganic Polysilazane IOTA-PHPS
- 寻找多个字典中的公共键
- 解析_Gson转换成Bean类的格式
- linux下fctrl()函数
- Android小知识(4)