我想知道如何使用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
重写它。我该怎么办?
答案 0 :(得分:5)
此处不需要流,您可以使用the new Collection#removeIf
method:
newStates.removeIf(path::contains);
或者,如果path
是Collection
:
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;列出作为输入。