にマッピングするために収集し、私はJavaの8ストリームでかなり良いなっていたと思ったが、その後...Javaストリームは、複数のキー
私はFoo
インタフェースを持っていますそれぞれのキーを使用してMap<String, Foo>
へStream<Foo>
:
Map<String, Foo> foosByKey = fooStream.collect(
Collectors.toMap(Foo::getKey, Function.identity()));
しかし、私はMap<Bar, Foo>
にそれらを収集したい場合は?言い換えれば、スチームの中のFoo
のそれぞれについて、Foo.bars()
によって返されたBar
インスタンスのすべてにキーを付けたマップにFoo
を入れたいと思います。どこから始めますか?
いいえ、あなたはそれを後方に持っています。 'Map'は、 'Bar'と' Foo'インスタンスの間に1対1のマッピングを暗示します。 'Map 'や 'Map 'を考えてみましょう。人は複数のクレジットカードを持ち、書籍は複数のISBNを持つことができます。ここでは何も複雑ではありません。 –
私はその意味を理解していますが、私はちょっと付帯的な点につきたくありませんでした。マッピングが双方向かどうかは、グラフが方向性を持っているかどうかによって決まります。 Javaの 'Map'は単方向であるため、マップすることはできません--- Guavaには例えばBiMapがあります。 _relationship_は1対1であると言いたいと思います。この場合、_relationship_は多対1です( 'Bar' -'Foo')。しかしもう一度これはポイントのそばで一種のものです---ビールについて議論することです。要約すると、 'Foo'は多くの' Bar'を持つことができ、 'Bar'を' Foo'にマップしたいのです。乾杯! –
確かに、それぞれの 'Foo'が多くの' Bar'を持つことができ、すべての 'Bar'は区別され、よく、私は[Sotiriosの答え](http://stackoverflow.com/a/37956805/2711488)には、適切な解決策が含まれています。あなたが彼の答えを受け入れることを止めさせる何か、私達は対処すべきことはありますか? – Holger