Stream流操作-结果收集终止方法-第一篇

简介: Stream流操作-结果收集终止方法-第一篇

因为Stream主要用于对集合数据的处理场景,所以除了上面几种获取简单结果的终止方法之外, 更多的场景是获取一个集合类的结果对象,比如List、Set或者HashMap等。

这里就需要 collect 方法出场了,它可以支持生成如下类型的结果数据:

  • 一个 集合类 ,比如List、Set或者HashMap等
  • StringBuilder对象,支持将多个 字符串进行拼接 处理并输出拼接后结果
  • 一个可以记录个数或者计算总和的对象( 数据批量运算统计 )

生成集合

应该算是collect最常被使用到的一个场景了:

publicvoidtestCollectStopOptions() {
List<Dept>ids=Arrays.asList(newDept(17), newDept(22), newDept(23));
// collect成listList<Dept>collectList=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toList());
System.out.println("collectList:"+collectList);
// collect成SetSet<Dept>collectSet=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toSet());
System.out.println("collectSet:"+collectSet);
// collect成HashMap,key为id,value为Dept对象Map<Integer, Dept>collectMap=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toMap(Dept::getId, dept->dept));
System.out.println("collectMap:"+collectMap);
}

结果如下:

collectList:[Dept{id=22}, Dept{id=23}]
collectSet:[Dept{id=23}, Dept{id=22}]
collectMap:{22=Dept{id=22}, 23=Dept{id=23}}

生成拼接字符串

将一个List或者数组中的值拼接到一个字符串里并以逗号分隔开,这个场景相信大家都不陌生 吧?

如果通过 for 循环和 StringBuilder 去循环拼接,还得考虑下最后一个逗号如何处理的问题, 很繁琐:

publicvoidtestForJoinStrings() {
List<String>ids=Arrays.asList("205", "10", "308", "49", "627",
"193", "111", "193");
StringBuilderbuilder=newStringBuilder();
for (Stringid : ids) {
builder.append(id).append(',');
    }
// 去掉末尾多拼接的逗号builder.deleteCharAt(builder.length() -1);
System.out.println("拼接后:"+builder.toString());
}

但是现在有了Stream,使用 collect 可以轻而易举的实现:

publicvoidtestCollectJoinStrings() {
List<String>ids=Arrays.asList("205", "10", "308", "49", "627",
"193", "111", "193");
StringjoinResult=ids.stream().collect(Collectors.joining(","));
System.out.println("拼接后:"+joinResult);
}

两种方式都可以得到完全相同的结果,但Stream的方式更优雅:

拼接后:205,10,308,49,627,193,111,193


相关文章
|
3月前
|
Python
8. 如何解决 Tornado 检测到了有事件(events)被发送到一个已经关闭的流(stream)。在 Tornado 中,一个流代表一个请求或响应的数据流。这个警告可能意味着在请求处理的过程中,
8. 如何解决 Tornado 检测到了有事件(events)被发送到一个已经关闭的流(stream)。在 Tornado 中,一个流代表一个请求或响应的数据流。这个警告可能意味着在请求处理的过程中,
|
3月前
|
存储 Java 开发者
Stream原理与执行流程探析
本文简单讲述了Stream原理,并以一段比较简单常见的stream操作代码为例进行讲解。
|
4月前
|
SQL 存储 数据库连接
【Azure Stream Analystics】流分析服务执行遇见警告错误消息,导致上游数据堆积,下游无任何输出
【Azure Stream Analystics】流分析服务执行遇见警告错误消息,导致上游数据堆积,下游无任何输出
【Azure Stream Analystics】流分析服务执行遇见警告错误消息,导致上游数据堆积,下游无任何输出
|
7月前
|
存储 分布式计算 网络协议
流知识超详细总结!一文搞懂!
流知识超详细总结!一文搞懂!
57 5
流知识超详细总结!一文搞懂!
|
6月前
|
Java
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
77 0
|
7月前
|
JavaScript 前端开发 Java
流的概念,怎么处理
流的概念,怎么处理
|
Java 程序员
Stream流操作-结果收集终止方法-最终篇
Stream流操作-结果收集终止方法-最终篇
118 0
Stream流操作-简单结果终止方法
Stream流操作-简单结果终止方法
125 0
|
7月前
|
存储 Java API
Flink中的状态管理是什么?请解释其作用和常用方法。
Flink中的状态管理是什么?请解释其作用和常用方法。
84 0
|
存储
Stream流终结操作方法、收集操作及Stream综合练习
Stream流终结操作方法、收集操作及Stream综合练习
133 0