过滤嵌套对象 java 8

sta*_*kyi 6 java java-8 java-stream

我有这些课

class LivingOrganism
{
    List<Domain> listOfDomain;
}

class Domain
{
    List<Species> listOfSpecies;
}

class Species
{
    List<Color> listOfColor;
}

class Color
{
    String color;
}
Run Code Online (Sandbox Code Playgroud)

从上到下,在我到达颜色之前,它不会有任何重复的条目。因此,某些物种即使在另一个域中也可以具有相同的颜色。一个单一的物种可以有不同的颜色。

给定一个父 LivingOrganism,我想用某种颜色过滤一个 listOfDomain。

我是在经典的嵌套 for 循环中完成的,但是使用 4 个嵌套 for,代码看起来并不漂亮。我试图使用 java 8 flatmap 和 filter 来获得一些更优雅的代码,但我花了几个小时没有成功。

我什至在 MSPaint 中绘制了一个糟糕的图形

假设我想得到List<Species>可以是蓝色的或List<Domain>所有Species可以是蓝色的。我该如何进行?

任何帮助,将不胜感激

sak*_*029 5

尝试这个。

List<Domain> result = livingOrganism.listOfDomain.stream()
    .filter(d -> d.listOfSpecies.stream()
        .flatMap(s -> s.listOfColor.stream())
        .anyMatch(c -> c.equals("blue")))
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)