如何使用java流改进这段代码

yjghlzjz  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(384)

我有一个要求,以找出是否有任何超过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();
}
bakd9h0s

bakd9h0s1#

您可以Map到年龄,过滤掉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 ?

nukf8bse

nukf8bse2#

我是用手机上的记忆来做这件事的,所以可能并不完美,但是。。。

return userList
    .stream()
    .filter(u -> u.getAge() > 18)
    .min(Comparator.comparing(User::getAge))
    .map(User::getAge)
    .orElse(-1);

相关问题