我有这些课程
class LivingOrganism
{
List<Domain> listOfDomain;
}
class Domain
{
List<Species> listOfSpecies;
}
class Species
{
List<Color> listOfColor;
}
class Color
{
String color;
}
从上到下,在我达到颜色之前,它不会有任何重复的条目。因此,即使它们在另一个域中,某些物种也可以具有相同的颜色。一个物种可以有不同的颜色。
鉴于父母LivingOrganism,我想过滤具有特定颜色的listOfDomain。
我是在经典的嵌套for循环中完成的,但是有4个嵌套,代码看起来不太漂亮。我试图使用java 8 flatmap和filter来获得更优雅的代码,但我花了好几个小时都没有成功。
I even made a badly drawn graph in MSPaint
假设我希望List<Species>
可以是蓝色,List<Domain>
可以是Species
,可以是蓝色。我该怎么办?
任何帮助将不胜感激
答案 0 :(得分:3)
试试这个。
List<Domain> result = livingOrganism.listOfDomain.stream()
.filter(d -> d.listOfSpecies.stream()
.flatMap(s -> s.listOfColor.stream())
.anyMatch(c -> c.equals("blue")))
.collect(Collectors.toList());
答案 1 :(得分:3)
你的Color
btw看起来很像enum
,可能应该这样做。此外,方法的名称应为listOfDomains
,listOfSpecies
和listOfColors
(注意最后的s
)。
String colorOfIntereset = "red";
LivingOrganism one = new LivingOrganism...
List<Domain> domains = one.getListOfDomain()
.stream()
.filter(d -> {
return d.getListOfSpecies()
.stream()
.flatMap(s -> s.getListOfColor().stream())
.anyMatch(c -> c.getColor().equals(colorOfIntereset));
})
.collect(Collectors.toList());