我有一段代码
List<Obj1> result = new ArrayList<Obj1>();
for (Obj1 one : list1) {
for (Obj2 two : list2) {
if (one.getStatus() == two) {
result.add(one);
}
}
}
在Java 8中使用流我可以像这样编写
list1.stream().forEach(one -> {
if (list2.stream().anyMatch(two -> one.getStatus() == two)) {
result.add(one);
}
});
这可以大大简化。
答案 0 :(得分:7)
假设list2
包含唯一值,并且equals
可以使用==
代替Obj2
,您可以这样写:
List<Obj1> result = list1.stream()
.filter(one -> list2.contains(one.getStatus()))
.collect(Collectors.toList());
虽然将list2
元素放到Set
会更高效。