java8->Collectors.mapping+Collectors.reducing+TreeSet等等
@Test public void demo9(){ // 求最大值 3 List<Integer> list = Arrays.asList(1, 2, 3); Integer maxValue = list.stream().collect(Collectors.collectingAndThen(Collectors.maxBy((a, b) -> a - b), Optional::get)); System.out.println("最大值:"+maxValue); // 最小值 1 Integer minValue = list.stream().collect(Collectors.collectingAndThen(Collectors.minBy((a, b) -> a - b), Optional::get)); System.out.println("最小值:"+minValue); // 求和 6 Integer sumValue = list.stream().collect(Collectors.summingInt(item -> item)); System.out.println("求和:"+sumValue); // 平均值 2.0 Double avg = list.stream().collect(Collectors.averagingDouble(x -> x)); System.out.println("平均值:"+avg); // 映射:先对集合中的元素进行映射,然后再对映射的结果使用Collectors操作 // A,B,C System.out.println("大写:"+Stream.of("a", "b", "c").collect(Collectors.mapping(x -> x.toUpperCase(), Collectors.joining(",")))); // sum: 是每次累计计算的结果,b是Function的结果 System.out.println("return:"+Stream.of(1, 3, 4).collect(Collectors.reducing(0, x -> x + 1, (sum, b) -> { System.out.println("sum:"+sum + "->b:" + b); return sum + b; }))); // 注意reducing可以用于更复杂的累计计算,加减乘除或者更复杂的操作 // result = 2 * 4 * 5 = 40 System.out.println("return:"+Stream.of(1, 3, 4).collect(Collectors.reducing(1, x -> x + 1, (result, b) -> { System.out.println("result:"+result + "->b:" + b); return result * b; }))); // Collectors.joining(",")的结果是:a,b,c 然后再将结果 x + "d"操作, 最终返回a,b,cd String str= Stream.of("a", "b", "c").collect(Collectors.collectingAndThen(Collectors.joining(","), x -> x + "d")); System.out.println("str: "+str); List<Integer> list1 = Arrays.asList(1, 2, 3); // [10, 20, 30] List<Integer> collect = list1.stream().map(i -> i * 10).collect(Collectors.toList()); // [20, 10, 30] Set<Integer> collect1 = list1.stream().map(i -> i * 10).collect(Collectors.toSet()); // {key1=value:10, key2=value:20, key3=value:30} Map<String, String> collect2 = list1.stream().map(i -> i * 10).collect(Collectors.toMap(key -> "key" + key/10, value -> "value:" + value)); // [1, 3, 4] TreeSet<Integer> collect3= Stream.of(1, 3, 4).collect(Collectors.toCollection(TreeSet::new)); System.out.println(collect+"\n"+collect1+"\n"+collect2+"\n"+collect3); }
作者:四叶草的诗雨
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)