Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java流改进此代码_Java_Java 8_Java Stream - Fatal编程技术网

如何使用java流改进此代码

如何使用java流改进此代码,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个要求,看看在给定的列表中是否有超过18岁的用户。如果没有超过18岁的用户,则该方法应返回-1。否则,它应该返回最年轻用户的年龄 在使用流时,我创建了以下方法,但是,流被使用了两次。有没有更好的方法来处理流呢 public int test(List<User> userList) { List<User> usersOver18 = userList.stream() .filter(emp -> emp.getAge() &

我有一个要求,看看在给定的列表中是否有超过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();
}
public int测试(List userList){
List usersOver18=userList.stream()
.filter(emp->emp.getAge()>18)
.collect(Collectors.toList());
if(usersOver18.isEmpty()){
返回-1;
}
返回usersOver18.stream()
.min(比较器比较(用户::getAge))
.get().getAge();
}

我用手机的内存来做这件事,所以它可能并不完美,但是

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

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

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

您可以映射到年龄,过滤掉18岁或以下的任何内容,然后在流为空时返回最小值或-1:

public int test(List<User> userList) {
    return userList.stream()
        .mapToInt(User::getAge)
        .filter(age -> age > 18)
        .min().orElse(-1);
}
public int测试(List userList){
返回userList.stream()
.mapToInt(用户::getAge)
.过滤器(年龄->年龄>18岁)
.min().orElse(-1);
}
请注意,在
mapToInt()
之后,您使用的是
IntStream
而不是
Stream
,并且
min()
返回
OptionalInt
,而不是
Optional


顺便问一下,您确定年龄筛选器不是
=18

您可以映射到年龄,过滤掉18岁或以下的任何内容,然后返回最小值或-1(如果流为空):

public int test(List<User> userList) {
    return userList.stream()
        .mapToInt(User::getAge)
        .filter(age -> age > 18)
        .min().orElse(-1);
}
public int测试(List userList){
返回userList.stream()
.mapToInt(用户::getAge)
.过滤器(年龄->年龄>18岁)
.min().orElse(-1);
}
请注意,在
mapToInt()
之后,您使用的是
IntStream
而不是
Stream
,并且
min()
返回
OptionalInt
,而不是
Optional


顺便问一下,您确定年龄筛选器不是
=18

除了链接流而不是
收集它之外,您还可以映射到年龄并避免未选中
。get
例如
return userList.stream().filter(emp->emp.getAge()>18)。mapToInt(User::getAge).min().orElse(-1)
。除了链接流而不是收集流之外,您还可以映射到年龄并避免未选中的
。get
例如
返回userList.stream().filter(emp->emp.getAge()>18)。mapToInt(User::getAge).min().orElse(-1)。最好先映射到年龄,而不是总是通过用户引用年龄。最好先映射到年龄,而不是总是通过用户引用年龄。