我有一个要求,以找出是否有任何超过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();
}
2条答案
按热度按时间bakd9h0s1#
您可以Map到年龄,过滤掉18岁或以下的任何内容,然后返回最小值或-1(如果流为空):
注意,在
mapToInt()
,您正在使用IntStream
而不是Stream<Integer>
,和min()
退货OptionalInt
,不是Optional<Integer>
.顺便问一句,你确定年龄过滤器不是
>= 18
?nukf8bse2#
我是用手机上的记忆来做这件事的,所以可能并不完美,但是。。。