一、collect

1、R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)

supplier:一个能创造目标类型实例的方法。

accumulator:一个将当元素添加到目标中的方法。

combiner:一个将中间状态的多个结果整合到一起的方法(并发的时候会用到)

List result = stream.collect(() -> new ArrayList<>(), (list, item) -> list.add(item), (one, two) -> one.addAll(two));

2、R collect(Collector collector)

Collector其实是上面supplier、accumulator、combiner的聚合体。那么上面代码就变成:

List list = Stream.of(1, 2, 3, 4).filter(p -> p > 2).collect(Collectors.toList());

3、Collector

Collector是Stream的可变减少操作接口,Collectors(类收集器)提供了许多常见的可变减少操作的实现。

4、创建Collector

a.转换成其他集合:toList、toSet、toCollection、toMap

List<Integer> collectList = Stream.of(1, 2, 3, 4)
.collect(Collectors.toList());
System.out.println("collectList: " + collectList);
// 打印结果
// collectList: [1, 2, 3, 4]

 b.转成值:

使用collect可以将Stream转换成值。maxBy和minBy允许用户按照某个特定的顺序生成一个值。

    • averagingDouble:求平均值,Stream的元素类型为double
    • averagingInt:求平均值,Stream的元素类型为int
    • averagingLong:求平均值,Stream的元素类型为long
    • counting:Stream的元素个数
    • maxBy:在指定条件下的,Stream的最大元素
    • minBy:在指定条件下的,Stream的最小元素
    • reducing: reduce操作
    • summarizingDouble:统计Stream的数据(double)状态,其中包括count,min,max,sum和平均。
    • summarizingInt:统计Stream的数据(int)状态,其中包括count,min,max,sum和平均。
    • summarizingLong:统计Stream的数据(long)状态,其中包括count,min,max,sum和平均。
    • summingDouble:求和,Stream的元素类型为double
    • summingInt:求和,Stream的元素类型为int
    • summingLong:求和,Stream的元素类型为long

例:

Optional<Integer> collectMaxBy = Stream.of(1, 2, 3, 4)
.collect(Collectors.maxBy(Comparator.comparingInt(o -> o)));
System.out.println("collectMaxBy:" + collectMaxBy.get());
// 打印结果
// collectMaxBy:4

c.分割数据块:Collectors.partitioningBy

 Map<Boolean, List<Integer>> collectParti = Stream.of(1, 2, 3, 4)
.collect(Collectors.partitioningBy(it -> it % 2 == 0));
System.out.println("collectParti : " + collectParti);
// 打印结果
// collectParti : {false=[1, 3], true=[2, 4]}

d.数据分组:Collectors.groupingBy

Map<Boolean, List<Integer>> collectGroup= Stream.of(1, 2, 3, 4)
.collect(Collectors.groupingBy(it -> it > 3));
System.out.println("collectGroup : " + collectGroup);
// 打印结果
// collectGroup : {false=[1, 2, 3], true=[4]}

e.字符串:Collectors.joining

String strJoin = Stream.of("1", "2", "3", "4")
.collect(Collectors.joining(",", "[", "]"));
System.out.println("strJoin: " + strJoin);
// 打印结果
// strJoin: [1,2,3,4]

二、聚合操作reduce

T reduce(T identity, BinaryOperator accumulator)

代码:

int value = Stream.of(1, 2, 3, 4).reduce(100, (sum, item) -> sum + item);

或者使用方法引用

int value = Stream.of(1, 2, 3, 4).reduce(100, Integer::sum);

value结果:101,103,106,110

T reduce(T identity, BinaryOperator accumulator)

  • identity:它允许用户提供一个循环计算的初始值。(例中的100)
  • accumulator:计算的累加器,其方法签名为apply(T t,U u),在该reduce方法中第一个参数t(例中的sum)为上次函数计算的返回值,第二个参数u(例中的item)为Stream中的元素,这个函数把这两个值计算apply,得到的和会被赋值给下次执行这个方法的第一个参数。

三、orElse(x):属于Stream终结操作,与findFirst()组合使用,返回对象,如果没有,则返回x。

StCompanySetting stCompanySetting = stCompanySettingDao.selectAll().stream().findFirst().orElse(null);//如果没有,则返回null

[java]Stream API——collect、reduce、orElse(x)的更多相关文章

  1. Spark算子--first、count、reduce、collect、lookup

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/4b8582c8dde1529abb11e4ccc8296171.html first.count.reduce ...

  2. 恕我直言你可能真的不会java第2篇:Java Stream API?

    一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...

  3. java stream Api

    Stream的简单使用 Stream的使用分为两种类型: Intermediate,一个Stream可以调用0到多个Intermediate类型操作,每次调用会对Stream做一定的处理,返回一个新的 ...

  4. Python特殊语法:filter、map、reduce、lambda [转]

    Python特殊语法:filter.map.reduce.lambda [转] python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, s ...

  5. python之map、filter、reduce、lambda函数 转

    python之map.filter.reduce.lambda函数  转  http://www.cnblogs.com/kaituorensheng/p/5300340.html 阅读目录 map ...

  6. 转:Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)

    Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...

  7. Python里的map、reduce、filter、lambda、列表推导式

    Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map( ...

  8. 内置函数_map()、reduce()、filter()

    map().reduce().filter() map()内置函数把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过 ...

  9. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

随机推荐

  1. 012-HQL中级2-Hive如何执行文件中的sql语句

    Hive可以运行保存在文件里面的一条或多条的语句,只要用-f参数,一般情况下,保存这些Hive查询语句的文件通常用.q或者.hql后缀名,但是这不是必须的,你也可以保存你想要的后缀名.假设test文件 ...

  2. WebHDFS vs HttpFS GateWay

    基于hadoop 2.7.1版本 一.简介 1. WebHDFS官方简介: Introduction The HTTP REST API supports the complete FileSyste ...

  3. Spring的AOP实现

    内容详见切面编程系列 https://www.cnblogs.com/jiyukai/category/1265045.html.

  4. Spring基本功能-扫描与继承

    一.Spring的扫描 一个稍大的项目中,可能会有成百上千个bean,此时采用xml的配置形式注入bean,一方面是配置文件显得十分庞大,另一方面也会导致后期的维护难度增加,为 此,Spring引入了 ...

  5. 我的Linux病毒追踪记录

    第一次自己一个人全权负责做游戏服务器,对于Linux安全并不太懂,所以就在昨天,服务器遭到了攻击,刚开始,只是发现服务器的带宽占满了,以为是带宽不够用,可是想想,弱联网游戏对带宽占用也不高啊而且带宽加 ...

  6. ViewFlipper

    main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  7. linux 下安装python3

    这篇真的很好 没报错一次通过了 https://www.cnblogs.com/kimyeee/p/7250560.html

  8. Qt 编码问题QTextCodec

    在学习计算机语言的时候, 关于字体编码问题, 一直是大家开始学习新语言比较头痛的问题, 在这边总结一下关于Qt图形框架开发的编码问题. 一般在Window开发环境里,是GBK编码,在Linux开发环境 ...

  9. [日志] spring boot + logback 日志输出配置

    一.输出日志到控制台 springboot有很多starter(参考starter)方便快速构建项目依赖组件,logback是springboot默认的日志组件,启动即可看到打印在控制台输出的info ...

  10. $(document).ready(function(){})和$(window).load(function(){})的区别

    页面加载完成有两种状态: 1.Ready:表示文档结构已经加载完成,不包含图片等非文字媒体文件,在Dom节点创建完成后执行,如果有多个定义则依次执行 $(document).ready(functio ...