2016-05-28 9 views
-3

ストリームの次の要素を取得する必要があります。イテレーターはどうですか?ストリーム内の次の要素を返します。

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

質問は少し不明です。 "next"要素を1つだけ戻してループを終了しますか? 1つの要素だけを返す必要がある場合は、次の要素も条件を満たしている場合はどうなりますか?それは返されるべきか、またそれをスキップしてもよいでしょうか? 条件を満たすすべての要素をスキップし、条件を満たす残りの要素をすべて集めるだけですか? – krokodilko

+0

@kordirkoはい私はただ一つの要素を返したいと思います。 prevが条件を満たす場合には次の要素を返し、それにいくつかの操作を行います。私は自分の投稿を更新する、私はそれがはっきりと思う。 –

+0

@ArtemDumanov、それはまだ完全にはっきりしていません。問題のために必要な入力と出力を投稿してください。 –

答えて

0

これを試してみてください:

while (iter.hashNext()) { 
    currentElement = iter.hasNext() 
    if(//if iter.hashNext() and if currentElement satisfies the predicate) { 

     return iter.next(); 

    } 
} 
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(); 

これがテーマのどれもあなたの条件を満たしていない場合、または1つが行う場合は何も、次の要素がありません必要な要素、または空のオプションを含むOptional<Theme>を返します。

あなたの例では、テーマがlastThemeと比較されます。これは、条件がストリームの前の要素に関するものであることを示唆しています。そうであれば、私は上記で概説したものとは異なっています。もしそうなら、明確にしてください。

関連する問題