java—我们可以跳过java8流吗

4c8rllxm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(370)

这个问题在这里已经有答案了

Java8中findany()和findfirst()的区别(7个答案)
Java8流在列表中查找元素(4个答案)
按 predicate 查找第一个元素(7个答案)
上个月关门了。
我有一个for循环,它遍历employeeid列表。在每个迭代中,它调用一个服务来查看它是否有任何值,如果我们得到一个id的任何值,那么我们需要跳过所有剩余的迭代。我使用了传统的for循环,如下面的shopn

for(int i=0; i<employeeIdLists.length; i++) {
    userDetails = someService.getUserId(employeeIdLists.get(i));
    if(userDetails != null) {
        i = employeeIdLists.length; // skip rest of the iteration
    }
}

我想知道我是否可以用java流做类似的事情。我试了一些,但这不符合预期

employeeIdLists.stream()
.map(id -> someService.getUserId(id))
.filter(userDetails -> userDetails!=null)
.collect(Collectors.toList());
zte4gxcn

zte4gxcn1#

是的,你可以用 findAny() 或者 findFirst() ,这将在第一次找到值时停止管道(在您的情况下,在筛选器之后):

userDetails = employeeIdLists.streams()
    .map(id -> someService.getUserId(id))
    .filter(userDetails -> userDetails!=null)
    .findAny()
    .orElse(null); //null if all values were null

在这条管道里, userDetails 将设置为未从服务中获得null结果的值,并且一旦找到该值,管道将立即停止。

相关问题