Java8 Stream流示例
流式处理#
+--------------------+ +------+ +------+ +---+ +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+ +------+ +------+ +---+ +-------+
filter#
filter(Objects::nonNull);// 过滤空元素
filter(u -> StringUtils.isNotEmpty(u.getId()))
sorted#
// 先按height升序,再按age降序;reverseOrder代表倒序
sorted(Comparator.comparing(User::getHeight).thenComparing(User::getAge, Comparator.reverseOrder()))
// 空的放在最后面,还有个nullsFirst是放在最前面
sorted(Comparator.comparing(User::getHeight, Comparator.nullsLast(Comparator.naturalOrder()))
// 处理字符串类型的数字
sorted(Comparator.comparing(User::getHeight, Comparator.comparingDouble(Double::parseDouble))
map#
map(User::getId)
map(String::valueOf)
map(i -> i*i)
// 嵌套list合并成一个list
flatMap(Collection::stream)
// 获取price,从字符串转成BigDecimal,累加
map(OrderModel::getPrice).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add)
collect#
collect(Collectors.toList())
collect(Collectors.joining(","));// 以","拼接各元素
collect(Collectors.toMap(User::getId, u -> u))
// 以Function.identity()代替u -> u,出现重复key时,使用第一个,指定map的实现类
collect(Collectors.toMap(User::getId, Function.identity(), (k1, k2) -> k1, LinkedHashMap::new))
// 无序分组
collect(Collectors.groupingBy(User::getCityId));
// 有序分组
collect(Collectors.groupingBy(User::getCityId, LinkedHashMap::new, Collectors.toList()));
其他#
list.toArray();
Arrays.asList(arr);
Arrays.stream(arr)
// list调用sort可以直接进行排序
list.sort(Comparator.comparing(User::getHeight).reversed().thenComparing(User::getAge));
boolean = anyMatch(u -> u.getType() == 1)
boolean = noneMatch(u -> u.getType() == 1)
count()
distinct()
forEach()
findAny()
findFirst().ifPresent(x -> x)
mapToInt(x -> x).summaryStatistics();// 统计
taskList.removeIf(model -> model.getMachineId() == 25);
作者:revil
出处:https://www.cnblogs.com/revil/p/16669767.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异