我需要从嵌套的List
中找到一些对象。
我认为不需要类代码,因为过滤是在嵌套的For-Each Loop
中公开的。
int value = someValue;
MyObject found = null;
for (List<MyObject> list : nestedList) {
for (MyObject myObject : list) {
if (myObject.isType() && myObject.getValue() == value) {
found = myObject;
}
}
}
另一个嵌套的是:
List<MyObject> listMyObject = new ArrayList<>();
for (List<MyObject> list : nestedList) {
for (MyObject myObject : list) {
if (myObject.isType() && myObject.getValue() == value) {
listMyObject.add(myObject);
}
}
}
我从这段代码开始,但是我很困惑。
nestedList.stream()
.forEach(list -> list.stream()
.filter(myObject -> myObject.isType() && myObject.getValue() == value)
.findAny()
);
如何使用Streams替换代码中的For-Each Loop
?
第二个循环for
listMyObject = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == value)
.collect(Collectors.toList());
答案 0 :(得分:1)
您可以将findAny
用作:
MyObject found = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == someValue)
.findAny()
.orElse(null);
尽管您的实际代码可确保选择最后找到的对象,因为每次满足条件时您都会覆盖该对象。
答案 1 :(得分:0)
这有助于您进行第二次循环
List<List<Integer>> inner=Arrays.asList(Arrays.asList(1,2,3),Arrays.asList(4,2,6));
List<Integer> optinner= inner.stream().flatMap(List::stream).filter(integer ->
integer==2).collect(Collectors.toList());