Dap*_*gma 2 foreach java-8 java-stream
我有一个带有其他对象列表的对象,每个其他对象都有一个列表等。我需要在层次结构中找到层次结构中具有匹配某个值的属性的第一个(也是唯一的)最后一个元素。看到我现在的代码会更清楚:
@Override
public Poste findByNumeroAndMillesime(String numero, Millesime millesime) {
return millesime
.getDivisions()
.stream()
.filter(
division -> division
.getGroupes()
.stream()
.filter(
groupe -> groupe
.getClasses()
.stream()
.filter(
classe -> classe
.getSousClasses()
.stream()
.filter(
sousClasse -> sousClasse
.getPostes()
.stream()
.filter(poste -> numero.equals(poste.getNumero()))
.findFirst()
.get()
))));
}
Run Code Online (Sandbox Code Playgroud)
我需要返回与作为参数传递的数字相同的 Poste。
提前致谢。
你可以像这样尝试 flatMap:
Optional<Postes> first =
millesime.getDivisions()
.stream()
.flatMap(m -> m.getGroupes().stream())
.flatMap(m -> m.getClasses().stream())
.flatMap(m -> m.getSousClasses().stream())
.flatMap(m -> m.getPostes().stream())
.filter(postes -> numero.equals(postes.getNumero()))
.findFirst();
Run Code Online (Sandbox Code Playgroud)
但是请注意如果您有大树可能会遇到的问题,因为 flatMap 并不是完全懒惰的。看: