Java8 Stream reduce

本文探讨了Java8 Stream的reduce方法,该方法常用于字符串连接、数值求和、求最小值、最大值以及平均值等操作,是Stream API中的一个重要终端操作。

Java8 Stream reduce

reduce()是一个终止操作,常见用法是用来进行字符串拼接、数值的sum、min、max、average


{
    public static void main(String[] args) {
        //12 reduce 把Stream元素组合起来,组合规则为传入的lambda表达式
        //它提供一个起始值(种子),然后依照运算规则(BinaryOperator),和前面 Stream 的第一个、第二个、第 n 个元素组合
        //从这个意义上说,字符串拼接、数值的 sum、min、max、average 都是特殊的 reduce
        System.out.println("-------------reduce 把Stream元素组合起来-------------");
        // 结果:拼接字符串str:开始:ABCD
        String str = Stream.of("A", "B", "C", "D")
                .reduce("开始:", String::concat);
        // 结果:拼接字符串str1:开始:ABCD
        String str1 = Stream.of("A", "B", "C", "D")
                .reduce("开始:", (s1, s2) -> s1 + s2);
        // 结果:拼接字符串str2:ABCD
        String str2 = Stream.of("A", "B", "C", "D")
                .reduce((s1, s2) -> s1 + s2).orElseGet(String::new);
        // 拼接字符串str3:1A21B21C21D2
        String str3 = Stream.of("A", "B", "C", "D")
                .reduce("", (s1, s2) -> s1 + "1" + s2 + "2", (s1, s2) -> s1 + "*" + s2);

        System.out.println("拼接字符串str:" + str);
        System.out.println("拼接字符串str1:" + str1);
        System.out.println("拼接字符串str2:" + str2);
        System.out.println("拼接字符串str3:" + str3);

        // 求最小值,minValue = -3.0
        double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0)
                .reduce(Double.valueOf(1), Double::min);
        System.out.println("最小值:" + minValue);

        // 两种写法,结果:求和,sumValue = 20, 有起始值
        int sumValue1 = Stream.of(1, 2, 3, 4)
                .reduce(10, Integer::sum);
        int sumValue2 = Stream.of(1, 2, 3, 4)
                .reduce(10, (v1, v2) -> v1 + v2);

        System.out.println("求和有起始值:" + sumValue1);
        System.out.println("求和有起始值:" + sumValue2);

        // 两种写法,结果:求和,sumValue = 10, 无起始值
        int sumValue3 = Stream.of(1, 2, 3, 4)
                .reduce(Integer::sum).orElse(Integer.valueOf(0));
        int sumValue4 = Stream.of(1, 2, 3, 4)
                .reduce((v1, v2) -> v1 + v2).orElse(Integer.valueOf(0));
        System.out.println("求和无起始值:" + sumValue3);
        System.out.println("求和无起始值:" + sumValue4);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值