使用 Java 流从嵌套列表中查找任何
findAny from nested List using Java Streams
我需要从嵌套 List
中找到一些对象。
我认为不需要 class 代码,因为过滤在嵌套 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());
您可以将 findAny
用作:
MyObject found = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == someValue)
.findAny()
.orElse(null);
虽然您的实际代码确保选择最后找到的对象,因为您每次满足条件时都会覆盖该对象。
这对你的第二个循环有帮助
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());
我需要从嵌套 List
中找到一些对象。
我认为不需要 class 代码,因为过滤在嵌套 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());
您可以将 findAny
用作:
MyObject found = nestedList.stream()
.flatMap(List::stream)
.filter(myObject -> myObject.isType() && myObject.getValue() == someValue)
.findAny()
.orElse(null);
虽然您的实际代码确保选择最后找到的对象,因为您每次满足条件时都会覆盖该对象。
这对你的第二个循环有帮助
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());