每日一例 | 通过stream更便捷地获取最大值最小值……

云中志

共 2973字,需浏览 6分钟

 · 2021-05-19


之前我们专门分享过stream的一些比较好用的便捷操作,比如listmap、元素过滤等,今天我们再来补充几个,也是比较常用的,比如获取list中的最大值元素,获取最最小元素。好了,话不多说,直接开始吧。

获取最大值

stream诞生以前,我们如果要获取集合中的最大值,基本上都是需要循环遍历整个元素:

 private static User maxAgeUser1(List<User> userList) {
        User maxAgeUser = new User();
        maxAgeUser.setAge(0);
        for (User user : userList) {
            if (user.getAge() > maxAgeUser.getAge()) {
                maxAgeUser = user;
            }
        }
        return maxAgeUser;
    }

整数

private static int maxInt1(List<Integer> integerList) {
        int max = 0;
        for (Integer integer : integerList) {
            if (integer > max) {
                max = integer;
            }
        }
        return max;
    }

这样的代码,一方面性能不够友好,另外一方面也不够简洁,一个方法中如果全是这样的代码,看起来也不够友好。但是stream诞生之后,最大值的获取就简单太多了:

private static User maxAgeUser2(List<User> userList) {
        return userList.stream().max(Comparator.comparing(User::getAge)).get();
    }

整数

private static int maxInt2(List<Integer> integerList) {
        return integerList.stream().max(Integer :: max).get();
    }

从原来的五六行,变成了现在的一行,代码更简洁,效率还更高了,岂不是美滋滋!

获取最小值

和最大值的获取类似,修改一下方法名就ok,这也太简单了吧:

private static User minAgeUser2(List<User> userList) {
        return userList.stream().min(Comparator.comparing(User::getAge)).get();
    }

整数

private static int minInt2(List<Integer> integerList) {
        return integerList.stream().min(Integer :: min).get();
    }

是不是很简洁,平时你写代码的时候也这样写的话,那效率岂不是刚刚的,原来要一个礼拜干完的活,现在只要三天,再也不用加班了……

- END -


浏览 79
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报