1
与えられたMap<String, Either<Boolean, Integer>
の場合、ブール値を持つエントリのみを含むMap<String, Boolean>
に変換する最も簡単な方法は何ですか?これは動作しますが、不必要に長ったらしいようだ、と解決「というflatmap」いくつかのタイトな、ワンステップ、そこにする必要がありますようにそれはそうJavaslangの<?, Either>のキーと左の値を抽出する
Map<String, Boolean> boolMap = eitherMap
.filter(entry -> entry._2.isLeft())
.map((key, value) -> Tuple.of(key, value.getLeft())
;
:
今、私はこれを持っています。
私はJavaslangに精通していないので、私は答えを完全には知らないのですが、いずれかが「バイアスされた」コンテナであれば可能かもしれません。それが偏っていれば、あなたのソリューションは最も単純なものかもしれません。 – melston
@melston「偏った容器」が意味することを明確にすることはできますか? –
これは通常、2つの可能な状態のいずれかを持つEitherのようなコンテナで使用されます。バイアスされたバリアントは、1つの状態が「成功」状態であり、もう1つがエラーまたは障害状態であるものです。この場合、flatmappingはOptionと同じように動作します。Noneの場合はflatmapを呼び出すだけでNoneが返されますが、Some(x)の場合はflatmapを呼び出してxを操作し続けます。このアプローチは、鉄道指向プログラミングと呼ばれることが多く、障害/なしは基本的に処理を停止します。したがって、成功した場合にflatmapを呼び出すと、含まれていた値が処理され、失敗した場合はflatmapを呼び出すだけで失敗が返されます。 – melston