流是什么
官方解释:支持顺序和并行聚合操作的元素序列
通俗解释:Stream 是对集合(Collection)对象功能的增强。它的操作模式类似于流水线,会把若干元素进行一步步操作,比如筛选, 排序,聚合等,最后生成你想要的结果。
使用流可以极大提高代码的编写效率,同时增加代码的可读性。
流的基本操作
1、获取流。一般Collection集合调用stream()方法,即可生成一个流,其他各类获取流方法暂不介绍
2、中间操作,如筛选, 排序,聚合等。每次中间操作都会生成一个新的流,然后继续下一个中间操作,直到进行终端操作。
3、终端操作,获得最终预期的结果,如:某个符合条件的元素、一个布尔值、一个新的集合、一个统计值
详细解释:
下图是《Java8实战》中的一个截图,场景是 菜单中热量超过300的菜中选三道
其中涉及到三个中间操作:
1、filter:筛选菜单中热量大于300的菜 --> 生成一个经过筛选的新的流
2、map:得到菜名 --> 生成一个新的流,流的元素是菜的名称
3、limit:只取流的前三个元素 --> 生成一个长度为3的菜名流
最后进行了终端操作collect(toList()),将菜名流转成了一个List
常见案例
中间操作
distinct
distinct:去重
另外有终端操作count:计数
最终效果:计算depotIdList中是否有重复的元素
if (depotIdList.stream().distinct().count() != depotIdList.size()) {
map(转化)
1、将Stream<BankAccountDTO>转为Stream<String>,变成了助记码(remindCode)流
2、将Stream<ClientBillDTO>转为Stream<Exte