zoukankan      html  css  js  c++  java
  • 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+"
    "+collect1+"
    "+collect2+"
    "+collect3);
    
    
        }
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    gdb常用命令
    linux退格键处理
    JavaScript的MVC模式(转载)
    linux编程 -- 网络编程(一)
    数组操作-将下标变成从0开始的连续数字
    很多学ThinkPHP的新手会遇到的问题
    PHP 统计一维数组value相同的元素的个数num,并将其转化为下标为数字,值是value和num的二维数组
    MySQL数据库使某个不是主键的字段唯一
    利用JS实现表单的自动提交
    thinkphp 使每个模板页都包含一个header文件和一个footer文件
  • 原文地址:https://www.cnblogs.com/name-lizonglin/p/13633557.html
Copyright © 2011-2022 走看看