每日一例 | 通过stream更便捷地获取最大值最小值……
之前我们专门分享过stream
的一些比较好用的便捷操作,比如list
转map
、元素过滤等,今天我们再来补充几个,也是比较常用的,比如获取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 -评论