涉及 java 8 中条件的嵌套循环
nested loops involving conditions in java 8
我有一段代码
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);
}
});
这个能再简化一下吗
假设 list2
包含唯一值,并且您可以使用 equals
而不是 ==
来表示 Obj2
,您可以这样写:
List<Obj1> result = list1.stream()
.filter(one -> list2.contains(one.getStatus()))
.collect(Collectors.toList());
尽管将 list2
元素放到 Set
中会更高效。
我有一段代码
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);
}
});
这个能再简化一下吗
假设 list2
包含唯一值,并且您可以使用 equals
而不是 ==
来表示 Obj2
,您可以这样写:
List<Obj1> result = list1.stream()
.filter(one -> list2.contains(one.getStatus()))
.collect(Collectors.toList());
尽管将 list2
元素放到 Set
中会更高效。