Stream.reduce()对Java对象进行操作

reduce()对Java 对象的操作

除了可以对数值进行累积计算外,灵活运用reduce()也可以对Java对象进行操作。下面的代码演示了如何将配置文件的每一行配置通过map()和reduce()操作聚合成一个Map<String, String>:

/**
 * @Auther Mario
 * @Date 2021-01-13 16:47
 * @Version 1.0
 * @description
 * 流的特点是每个元素只遍历一次,聚合操作无非就是一个遍历+累加计算的过程,内部已经自动帮你遍历了
 *
 * 你想再遍历一遍,那只能构造一个新的stream
 */
public class ReduceTest {
          
   

    public static void main(String[] args) {
          
   
        Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9);
        int sum = Stream.of(1,2,3,4,5,6,7,8,9).reduce(0,(acc,n) -> acc + n);
        System.out.println(sum);

        List<String> props = List.of("profile=native", "debug=true", "logging=warn", "interval=500");
        Map<String,String> map = props.stream().
                // 把k=v转换为Map[k]=v:
                //此时map()返回的是一个Map,不能再下面一步调用m.put()函数,因为put()函数是一个map添加key-value,
                // 形式是map.put(1,"google"),put(kv)不符合这个表达式
                map(kv ->{
          
   
                    String[] ss = kv.split("\=",2);
//                    System.out.println(ss[0]+ss[1]);
                    return Map.of(ss[0],ss[1]);
                }).
                // 把所有Map聚合到一个Map:  ,new HashMap<String,String>()就是初始值,新建的Map,
                        //reduce()操作首先初始化结果为指定值(这里是new HashMap),此时m = new HashMap()
                reduce(new HashMap<String,String>(),(m,kv) ->{
          
   
//                  m.put(kv);
                    m.putAll(kv);
                    return m;
                });

        map.forEach((k,v) -> {
          
   
            System.out.println(k + " = "+ v);
        });
    }
}
/**
 * 总结一下:
 * map()和filter()都是Stream的转换方法,而Stream.reduce()则是Stream的一个聚合方法,
 * 它可以把一个Stream的所有元素按照聚合函数聚合成一个结果。
 * reduce()方法将一个Stream的每个元素依次作用于BinaryOperator,并将结果合并。
 *
 * reduce()是聚合方法,聚合方法会立刻对Stream进行计算。
 */

结果如下:

logging = warn
interval = 500
debug = true
profile = native

使用map.put(kv)运行结果:

总结一下:

    map()和filter()都是Stream的转换方法,而Stream.reduce()则是Stream的一个聚合方法, 它可以把一个Stream的所有元素按照聚合函数聚合成一个结果。 reduce()方法将一个Stream的每个元素依次作用于BinaryOperator,并将结果合并。 reduce()是聚合方法,聚合方法会立刻对Stream进行计算。
经验分享 程序员 微信小程序 职场和发展