如何使用Java 8流?

时间:2015-06-06 12:39:17

标签: java foreach java-8 java-stream

我想知道如何使用Java 8流以及如何使用不同类型的可用流操作。 例如,我写了这部分代码:

ArrayList<State> toBeRemoved = new ArrayList<>();
for (State s : newStates)
     if (path.contains(s))     // path is a stack of State
         toBeRemoved.add(s);
for (State s : toBeRemoved)
     newStates.remove(s);

我想用java 8 stream api calls重写它。我该怎么办?

2 个答案:

答案 0 :(得分:5)

此处不需要流,您可以使用the new Collection#removeIf method

newStates.removeIf(path::contains);

或者,如果pathCollection

newStates.removeAll(path);

答案 1 :(得分:3)

在这种情况下,您只需生成一个输出List,其中只包含应保留的状态,并将该List分配给newStates变量:

newStates = newStates.stream()
                     .filter(s -> !path.contains(s))
                     .collect(Collectors.toList());

过滤器仅保留path.contains(s)返回false的状态。

当然,如果newStates最初初始化为某些&#34; oldStates&#34;的副本。列表,您可以跳过该启动步骤并使用原始&#34; oldStates&#34;列出作为输入。