如何解决如何使用Java流改进此代码
我需要确定给定列表中是否有18岁以上的用户。如果没有超过18岁的用户,则该方法应返回-1。否则,它应该返回最小用户的年龄。
在使用流的同时,我创建了以下方法,但是,该流被使用了两次。有没有更好的方法可以使用流
public int test(List<User> userList) {
List<User> usersOver18 = userList.stream()
.filter(emp -> emp.getAge() > 18)
.collect(Collectors.toList());
if (usersOver18.isEmpty()) {
return -1;
}
return usersOver18.stream()
.min(Comparator.comparing(User::getAge))
.get().getAge();
}
解决方法
您可以映射到年龄,过滤掉18岁或以下的任何内容,如果流为空,则返回最小值或-1:
public int test(List<User> userList) {
return userList.stream()
.mapToInt(User::getAge)
.filter(age -> age > 18)
.min().orElse(-1);
}
请注意,在mapToInt()
之后,您正在使用IntStream
而不是Stream<Integer>
,并且min()
返回OptionalInt
,而不是Optional<Integer>
。
顺便问一下,您确定年龄过滤器不是>= 18
吗?
我正在通过手机上的内存进行此操作,因此它可能并不完美,但是...
return userList
.stream()
.filter(u -> u.getAge() > 18)
.min(Comparator.comparing(User::getAge))
.map(User::getAge)
.orElse(-1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。