私のコントロール下にないサービスから、nullの可能性があるマップを取得し、処理したいと思います。フィルタ、マップ、必要な要素を減らしたいと思います。オプションの内容に基づいたストリームを使用する<Map>
質問:オプションからストリームへのリンクはありますか?
私は(他のものの間で)試してみました:
return Optional.ofNullable(getMap())
.map(Map::entrySet) // gets the entryset
.map(Stream::of)
.orElseGet(Stream::empty)
// i would then like to continue with
.filter(e -> e.getKey().startsWith("f")
.map(Entry::getValue)
.findFirst();
をその後私はStream<Entry>
ない得るが、Stream<Set<Entry>>
...何とかflatMapコレクションにまたはオプションの外にマッピングする方法はありますか?
注:ここでは流暢で純粋なストリーム/オプションのアプローチに興味があります。もちろん、マップをローカル変数に保存してからnullになっていないか確認してください。
キャストストリームからストリーム?いいえ、私はできません。 –
'getMap()'を 'null'の代わりに空のマップを返すように変更することを検討するべきでしょう。あなたはそれを 'Optional'で囲むことはできません。そうすれば、簡単にそのような問題を避けることができます。 [Stuart Marks](https://stackoverflow.com/users/1441122/stuart-marks)によると、[Rule#4:その方法をチェーン化するという特定の目的のためには、 ](https://youtu.be/Ej0sss6cq14?t=27m55s)。 –
Java 9では、['Optional'は' stream() 'メソッドを持ちます](http://download.java.net/java/jdk9/docs/api/java/util/Optional.html#stream--)あなたは単純に次のようにすることができます: 'Optional.ofNullable(getMap())。map(Map :: entrySet).stream()。flatMap(Set :: stream)...' –