2017-01-31 4 views
-1

これはなぜ失敗するのでしょうか。マップのJavaラムダtoMap <String、Boolean>

Map<String, Boolean> iMap = Arrays.asList("1","2","3","4","5").stream() 
    .collect(Collectors.toMap(k->k, Boolean.TRUE)); 

エラーメッセージ:すべてのヘルプは感謝

Multiple markers at this line 
    - Type mismatch: cannot convert from T to K 
    - The method toMap(Function<? super T,? extends K>, Function<? super T,? extends U>) 
     in the type Collectors is not applicable for the arguments ((<no type> k) -> {}, Boolean) 

+3

「toMap」の第2引数のタイプは何ですか? –

+0

機能ではありません。了解、ありがとう。 –

+0

'Arrays.asList(" 1 "、" 2 "、" 4 "、" 5 ").stream()'の代わりに 'Stream.of(" 1 "、" 2 " "3"、 "4"、 "5")を使用して直接あなたの意図を表現します。 – Holger

答えて

3

Collectors.toMap()は、両方のパラメータでFunctionが必要です。代わりにBooleanを渡そうとしています。これを試してください:

Collectors.toMap(k->k, k->Boolean.TRUE) 
+0

ビンゴ、ありがとう。 –

+0

本当ですか? Collectors.toMap(k-> k、v-> Boolean.TRUE)は読み込みに問題がありますか? –

+0

@Nicholasそれは誤解を招きます。 'k'はキーを表すものではなく、ストリーム要素を表します。第2のパラメータに「v」を使用すると、混乱が伝播するだけです。 – shmosel

関連する問題