は、あなたが複数のネストされた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
と比較されます。これは、条件がストリームの前の要素に関するものであることを示唆しています。そうであれば、私は上記で概説したものとは異なっています。もしそうなら、明確にしてください。
質問は少し不明です。 "next"要素を1つだけ戻してループを終了しますか? 1つの要素だけを返す必要がある場合は、次の要素も条件を満たしている場合はどうなりますか?それは返されるべきか、またそれをスキップしてもよいでしょうか? 条件を満たすすべての要素をスキップし、条件を満たす残りの要素をすべて集めるだけですか? – krokodilko
@kordirkoはい私はただ一つの要素を返したいと思います。 prevが条件を満たす場合には次の要素を返し、それにいくつかの操作を行います。私は自分の投稿を更新する、私はそれがはっきりと思う。 –
@ArtemDumanov、それはまだ完全にはっきりしていません。問題のために必要な入力と出力を投稿してください。 –