hot*_*oup 7 java java-8 java-stream
Java 8在这里。寻找一种(可能基于流的)“ Java 8”替换和/或删除对象的方法List。这是我的代码:
public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
int i = 0;
for (Fizz fizz : fizzes) {
i++;
if (fizz.getId() == toModify.getId()) {
switch(action) {
case Replace:
// Here we want to replace 'fizz' in the list
// with 'toModify' however order/sequence doesn't matter.
fizzes.remove(i);
fizzes.add(toModify);
break;
case Delete:
default:
// Here we just want to remove the Fizz with the matching
// ID from 'fizzes'.
fizzes.remove(i);
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这可以更高效/简洁地编写,也可以利用Java 8流/映射来编写,但是我似乎无法弄清楚如何将所有内容连接在一起。有任何想法吗?
因为您使用的void是返回类型,并且想要使用Stream修改给定的List并不是最佳解决方案。您可以使用List.replaceAll()并List.removeIf()通过一个简单的if语句来解决此问题:
public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
if (action == Action.Replace) {
fizzes.replaceAll(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz);
} else {
fizzes.removeIf(fizz -> fizz.getId() == toModify.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您执行的操作多于替换和删除操作,则可以使用switch语句代替if。
如果您真的想使用Streams,我还将分开不同的操作。您还必须在方法中返回新的List并将其重新分配给传递给该方法的变量:
public List<Fizz> applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
if (action == Action.Replace) {
return fizzes.stream()
.map(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz)
.collect(Collectors.toList());
}
return fizzes.stream()
.filter(fizz -> fizz.getId() != toModify.getId())
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |