Java中Stream流里面的findFirst()和findAny()区别及allMatch用法

findFirst()和findAny()存在并行上的区别,findFirst并行限制较多,findAny并行限制较少,如果不在乎哪个值,用findAny。

两个list列表用stream流进行过滤,取它们的交集:

List<ChangeRecordListDTO> filteredList = allList.stream().filter(t -> recordList.stream().filter(s -> t.getId().longValue() == s.getManagerId()).findFirst().orElse(null) != null).collect(Collectors.toList());

两个list列表用stream流进行过滤,取它们的差集,注意:只返回bb中独有的元素,不返回aa中独有的元素 

List<ProxyListInfo> filteredList = bb.stream().filter(t -> aa.stream().allMatch(s -> !t.getProxyIp().equals(s.getProxyIp()) && !t.getDelFlag())).collect(Collectors.toList());

 

在分组时,将映射的对象转成其他值,默认用Collectors.toList()代替Collectors.mapping()

Map<String, List<String>> tableMap = tableList.stream().collect(Collectors.groupingBy(TableDTO::getDbName, Collectors.mapping(TableDTO::getTableName, Collectors.toList())));

 

posted @ 2021-05-16 16:57  ppjj  阅读(3067)  评论(0编辑  收藏  举报