我有一张地图。我们说
{
"content_scripts": [
{
"matches": ["*://web.whatsapp.com*"],
"js": ["content_script.js"]
}
]
}
每列火车都有一个清单
Map<Long, Train>
我有另一个清单
List<Integer> parts = train.getTrainParts()
我想迭代地图并收集所有至少有一个蓝色部分的列车。
这是对List<Integer> blueParts;
s:
Stream
有哪些更好的选择? 流或不流?
e.g。
trainMap().values().stream().filter(part -> {
boolean found = false;
for (Long part : train.getTrainParts()) {
if (blueParts.conatins(part)) {
found = true;
}
}
return found;
).collect(Collectors.toList());
答案 0 :(得分:7)
您可以简化过滤器:
List<Train> =
trainMap().values()
.stream()
.filter(t-> t.getTrainParts().stream().anyMatch(p->blueParts.contains(p)))
.collect(Collectors.toList());
如果您可以将blueParts
更改为HashSet
而不是List
,那么您的代码运行速度会更快,因为blueParts.contains()
需要恒定时间而不是线性时间
答案 1 :(得分:1)
基于你的问题:&#34;我想迭代地图并收集所有至少有一个蓝色部分的列车。&#34;我认为你正在寻找在蓝色部分列表中至少有一个元素的列车,下面是你可以做的事情。
List<Train> trainList = trainMap.values().stream().filter(t -> t.getBlueParts().size()>0).collect(Collectors.toList());