温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java8新特性之stream流中reduce()求和知识有哪些

发布时间:2021-05-25 11:20:30 来源:亿速云 阅读:335 作者:小新 栏目:开发技术

这篇文章主要介绍了java8新特性之stream流中reduce()求和知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

1.stream().reduce()单字段求和

(1)普通数字求和

 public static void test2(){
        List<Integer> list= Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9});
        Integer sum=list.stream().reduce((x,y)->x+y).get();
        System.out.println(sum);
    }

java8新特性之stream流中reduce()求和知识有哪些

2.BigDecimal求和

 public static void main(String[] args) {

        List<User> list=new ArrayList<>();

        User user1=new User();
        user1.setNum1(new BigDecimal(123));
        user1.setNum2(new BigDecimal(100));
        list.add(user1);

        User user2=new User();
        user2.setNum1(new BigDecimal(100));
        user2.setNum2(new BigDecimal(100));
        list.add(user2);
        BigDecimal sum=list.stream().map(User::getNum1).reduce(BigDecimal::add).get();
        System.out.println(sum);
    }

结果:

java8新特性之stream流中reduce()求和知识有哪些

但是如果列表是中没有数据list.size()==0的时候会报错,所以需要将代码修改成如下:

BigDecimal sum=list.stream()
						.map(User::getNum1)  //返回num1的列表
						.reduce(BigDecimal.ZERO,BigDecimal::add);  //列表字段求和

当list中没有元素的时候就默认返回0;

2.stream().reduce()多字段求和

public static void main(String[] args) {

        List<User> list=new ArrayList<>();

        User user1=new User();
        user1.setNum1(new BigDecimal(123));
        user1.setNum2(new BigDecimal(100));
        list.add(user1);

        User user2=new User();
        user2.setNum1(new BigDecimal(100));
        user2.setNum2(new BigDecimal(100));
        list.add(user2);

        User u=list.stream().reduce((x,y)->{
            User user=new User();
            user.setNum1(x.getNum1().add(y.getNum1()));
            user.setNum2(x.getNum2().add(y.getNum2()));
            return user;
        }).get();
        System.out.println(u.getNum1()+"------------"+u.getNum2());
    }

结果:

java8新特性之stream流中reduce()求和知识有哪些

同样,如果list中没有元素,则使用如下方式:

   User u=list.stream().reduce(new User(),(x,y)->{
            User user=new User();
            user.setNum1(x.getNum1().add(y.getNum1()));
            user.setNum2(x.getNum2().add(y.getNum2()));
            return user;
        });

默认给一个User对象,就不会报错。

总结

有三个参数类型,本文只说了前两个
1.一个参数:Optional reduce(BinaryOperator accumulator),传入求和函数式,
2.两个参数:T reduce(T identity, BinaryOperator accumulator),(默认值,求和函数式)
3.三个参数的没怎么用过,暂不说明

感谢你能够认真阅读完这篇文章,希望小编分享的“java8新特性之stream流中reduce()求和知识有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI