使用Java Streams根据孙子属性过滤列表

问题描述 投票:0回答:1

问题

我想使用流根据实例是否存在于层次结构的底层来过滤列表。 因此,我有

List<Summary>
->
Group
->
Summary
->
Person
,我希望能够对其进行过滤以包含至少一个子组不包含任何年龄以下的人的条目30. 如果满足这个标准,我想保留它
Summary

我理想地希望使用纯 Java,但由于托管该应用程序,我被困在 JDK-8 上。我似乎无法找出嵌套流来实现此目的的正确方法。

课程

我有

List<Summary>
我想过滤它,这可以分解为

public class Summary {
  Group aGroup;
  Long numPeople;
  String manager;
}

其中一个

List
中有多个实例。 然后我就有了

public Class Group {
  List<SubGroup> subGroups;
  //...
}
public Class SubGroup {
  List<Person> people;
  //...
}
public class Person  {
  String name;
  int age;
  //...
}
java java-stream
1个回答
0
投票

像这样吗?

List<Summary> filteredSummaries = summaries.stream()
    .filter(summary -> summary.getGroup().getSubGroups().stream()
        .flatMap(subGroup -> subGroup.getPeople().stream())
        .anyMatch(person -> person.getAge() >= 30))
    .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.