返回流中的下一个元素

时间:2016-05-28 07:28:15

标签: java list collections iterator java-stream

需要在流中获取下一个元素。 iterator怎么样?

student.getStudentGroupList().forEach(g -> { 
   g.getCourseList().forEach(c -> {         
      c.getThemeList().forEach(t -> {
         if (t.equalsIgnoreId(lastTheme)) {
           //return next 
         }
      });
   }); 
});

2 个答案:

答案 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();

   }
}