2017-05-04 7 views
-1

Supplied引数を持つCollectors.toMapメソッドを理解することはできません。 this oneCollectors.toMapサプライヤ引数付き

私はキー、値、重複を扱うバイナリを作成する関数を使って、他のものを完全に理解しています。私は余分なサプライヤ引数を持つ最後のメソッドを理解していません。ここ

+1

余分なサプライヤは、返されるMapの実装を決定できます(たとえば、HashMap :: newまたはLinkedHashMap :: newを渡すことができます)。 – Eran

+0

docは 'Collectors.toCollection(TreeSet :: new)'を持つ 'Collection'のためにそれを示しています – AxelH

+1

[この質問への2番目の答え(http://stackoverflow.com/questions/33724733/confused-by-java8-コレクタ - トマップ)はよく説明されている例を持っています –

答えて

0

あなたが言及した方法は、あなたが両方を決定することができます:

  • 具体的なマップの実装(例えばHashMapのConcurrentHasMap、等。)
  • その実装の具体的なインスタンス(あなたは、新しく作成されたインスタンスか、あなたのアプリケーションのヒープ上に作成されたインスタンスを渡すことができます)

これとは対照的に、他の2つのオーバーロードされたバージョンでは、マップの実装はライブラリによって選択され、新しいインスタンスが作成されます。

+0

意味があります。ありがとうございました。 1つの最後のこと。サプライヤの議論がなければ、実装は「ライブラリ」によって選択されるということは、どういう意味ですか? – tisek

2

は一例であり:

Arrays.asList(1, 2, 3).stream() 
     .collect(Collectors.toMap(i -> i, i -> i, (i, j) -> i, HashMap::new)); 

この例でSupplier<M> mapSupplierが空Mapを作成することができる工場HashMap::newあります。

関連する問題