需要在流中获取下一个元素。 iterator怎么样?
student.getStudentGroupList().forEach(g -> {
g.getCourseList().forEach(c -> {
c.getThemeList().forEach(t -> {
if (t.equalsIgnoreId(lastTheme)) {
//return next
}
});
});
});
答案 0 :(得分:1)
鉴于您有多个嵌套的forEach
来电,通往"展平"这一切都是使用flatMap
:
student.getStudentGroupList().stream()
.flatMap(g -> g.getCourseList().stream())
.flatMap(c -> c.getThemeList().stream())
...
这可以让您了解所有学生团体所有课程的所有主题。
如果你想获得匹配的下一个元素,请使用这种技术(仅限Java 9):删除前导的,不匹配的元素,跳过下一个元素(这是第一个匹配),然后获取以下元素。
...
.dropWhile(t -> !yourCondition(t))
.skip(1)
.findFirst();
这会返回包含所需元素的Optional<Theme>
,如果没有任何主题符合您的条件,则返回空可选项,或者如果有,但没有后续元素。
在您的示例中,您将主题与lastTheme
进行比较,后者向我建议条件是关于流中的前一个元素。如果是这种情况,它与我上面概述的不同,如果是,请澄清。
答案 1 :(得分:0)
试试这个:
while (iter.hashNext()) {
currentElement = iter.hasNext()
if(//if iter.hashNext() and if currentElement satisfies the predicate) {
return iter.next();
}
}