使用 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());