使用Java Streams基于孙属性过滤列表

evrscar2  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(146)

问题

我想使用流来根据示例是否存在于层次结构的底层来过滤列表。Person,并且我希望能够过滤此项,以包括至少一个子组不包含任何年龄在30岁以下的人的条目。如果满足此条件,我想保留那个Summary
我理想中想使用纯Java,但由于应用程序的原因,我被JDK-8卡住了。我似乎找不到正确的方法来嵌套流来实现这一点。
我已经走到这一步,但它忽略了没有子组或子组中没有人的情况,我不完全相信这是正确的逻辑

  1. summaries.stream()
  2. .filter (s -> s.getGreoup().getSubGroups.stream()
  3. .anyMatch(sg -> sg.getPeople.stream()
  4. .noneMatch(p -> p.getAge() < 30)))
  5. .collect(Collectors.toList());

字符串

我有List<Summary>,我想过滤它,它分解为

  1. public class Summary {
  2. Group aGroup;
  3. Long numPeople;
  4. String manager;
  5. }


在一个List中有多个示例。

  1. public Class Group {
  2. List<SubGroup> subGroups;
  3. //...
  4. }
  1. public Class SubGroup {
  2. List<Person> people;
  3. //...
  4. }
  1. public class Person {
  2. String name;
  3. int age;
  4. //...
  5. }
w46czmvw

w46czmvw1#

像这样吗?

  1. Predicate<SubGroup> isU30OnlySubGroup = subGroup ->
  2. subGroup.getPeople().stream().allMatch(person -> person.getAge() >= 30);
  3. Predicate<Summary> hasU30OnlySubGroup = summary ->
  4. summary.getGroup().getSubGroups().stream().anyMatch(isU30OnlySubGroup);
  5. List<Summary> filteredSummaries =
  6. summaries.stream().filter(hasU30OnlySubGroup).collect(Collectors.toList());

字符串

相关问题