Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
使用Java8流API时如何移动到循环中的下一个值_Java_Loops_Java 8_Iteration_Java Stream - Fatal编程技术网

使用Java8流API时如何移动到循环中的下一个值

使用Java8流API时如何移动到循环中的下一个值,java,loops,java-8,iteration,java-stream,Java,Loops,Java 8,Iteration,Java Stream,在java集合上使用外部迭代时,我们使用关键字“continue”移动到循环中的下一个值。在这种情况下,当我们使用java流API时会怎么样?例如: List<User> users; for(Item item : item){ users.stream() .filter(user -> user.getName().equals("Tom")) .findFirst() .ifPresent(move to the

在java集合上使用外部迭代时,我们使用关键字“continue”移动到循环中的下一个值。在这种情况下,当我们使用java流API时会怎么样?例如:

List<User> users;

for(Item item : item){
    users.stream()
        .filter(user -> user.getName().equals("Tom"))
        .findFirst()
        .ifPresent(move to the next value in a outer loop(items) ???? like **continue**;);

    more code here...
}

流API不像提供的那样提供迭代机制,为此您必须使用
迭代器。但是,最好先过滤正确的值

List<User> filteredUsers = users.stream()
    .filter(user -> user.getName().equals("Tom"))
    .collect(Collectors.toList());

< > > Ed2:正如薄赫绵所正确指出的,考虑每次迭代中检查元素的存在,因为可能有一个元素,它包含了<代码>“Tom”< /C> >,并且条件不再是“代码> false ”。

< P> java流API仅用于处理特定元素流。您永远不能将其用于控制语句,如“break”或“continue”,以控制外部循环(如此处您希望控制“Item”循环)。

也许您只需要:

for (Item item : item){
    if (users.stream().anyMatch(u -> u.getName().equals("Tom"))) {
        continue;
    }

    // more code here...
}

你到底想做什么?找到任何匹配项后要执行的操作?
findFirst()
只返回单个元素(如果存在)。如果要迭代所有元素,请使用
forEach()
。如果user.getName().equals(“Tom”),则我要跳过一个iteration,然后移动到下一个item,因此要获取
Tom
之后的下一个条目?仍然不清楚。。。演示在没有流的情况下如何操作。我将首先评估条件,然后进入循环。@Nikolas除了“这里有更多代码”可能会将Tom添加到用户中。@Boheamian:一个很好的观点!:))+1.这取决于“这里有更多的代码”真的有。
Iterator<User> iterator = filteredUsers.iterator();
while (iterator.hasNext()) {
    User user = iterator.next()
    // Take a control over the further iteration here...
}
if (users.stream().anyMatch(user -> user.getName().equals("Tom"))) {
    for (Item item : item) {
        // ...
    }
}
for (Item item : item){
    if (users.stream().anyMatch(u -> u.getName().equals("Tom"))) {
        continue;
    }

    // more code here...
}