kvlist.remainAll(shipper(based on code))
我有两个项目清单,根据我要过滤kvlist的托运人
我想执行computed() {
someData: {
return this.$store.states.someDataFromParaent
}
}
之类的操作,并希望将这些循环转换为流代码。
答案 0 :(得分:5)
不理想,但你可以尝试做类似的事情:
List<KeyValueStoreModel> filtered = kvlist.stream().filter(
kv -> shippers.stream().anyMatch(
s -> s.getCode().equals(kv.getCode())
)
)
).collect(Collectors.toList());
因此,我们得到Stream
个kv元素,而不是检查托运人Set
中是否有任何相应的元素,最后我们将匹配的元素收集到新的List
中。
答案 1 :(得分:2)
如果您想修改现有的收藏品,最好使用updated fiddle:
kvList.removeIf(model -> shippers.stream().map(ShipperModel::getCode)
.noneMatch(model.getCode()::equals));
这里我们传递一个条件:我们只删除那些在shippers
中没有相应代码的元素。
如果您有许多托运人,您可以考虑先将他们的代码转储到中间集:
Set<Code> shipperCodes = shippers.stream().map(ShipperModel::getCode)
.collect(Collectors.toSet());
kvList.removeIf(model -> !shipperCodes.contains(model.getCode()));
这样算法的成本从O(N * M)下降到O(N + M),其中N和M分别是托运人和模型的数量。