我有一个对象列表。每个对象包含另一个列表。我想用内部列表中的条件过滤列表。
例如:
有一份工厂清单。每个工厂都包含一系列不同的汽车模型。 我想以这样的方式过滤工厂列表,我将只获得生产Mazda3的工厂。
我怎么能用lambda做到这一点?
它应该与此类似:
Observable
答案 0 :(得分:10)
如果我理解正确(并简化了你的例子)
List<List<Integer>> result = Arrays.asList(
Arrays.asList(7),
Arrays.asList(1, 2, 3),
Arrays.asList(1, 2, 4),
Arrays.asList(1, 2, 5))
.stream()
.filter(inner -> inner.stream().anyMatch(x -> x == 5))
.collect(Collectors.toList());
System.out.println(result); // only the one that contains "5"[[1,2,5]]
修改强>
看到您的示例后,您正在寻找anyMatch
答案 1 :(得分:6)
以下是应该做的事情:
factories.stream()
.filter(factory -> factory.getCars().stream()
.anyMatch(car -> searchedName.equals(car.getName())))
.collect(Collectors.toList())
但如果您可以在工厂类中添加特定方法,那将是更好的设计:
factories.stream()
.filter(factory -> factory.hasProduced(model))
.collect(Collectors.toList())
另请参阅complete log of one session can be found here - 因为它只显示方法通过编译,而不是带有数据的完整演示,但您可以在自己的代码中自己完成,所以......;)