2017-01-31 17 views
0

のJavaのHashMapに区切り文字で一覧<String>変換<文字列、文字列>

List<String> data = Arrays.asList("key1=value1", "key2=value2"); 

はHashMapのにこれを変換するために、ストリームAPIを使用してJavaでの方法はありましょうか?

すなわち{{KEY1 - >値1}、{KEY2 - >値2}}

HashMap<String, String> dataMap = data.stream().map(s -> s.split("=")).//some stuff here//.collect(//some stuff here//); 
+4

http://stackoverflow.com/questions/4138364/java-how-to-convert-を見ますリストへのマップ、またはhttp://stackoverflow.com/questions/20363719/java-8-listv-into-mapk-vなどを参照してください。 –

答えて

2
HashMap<String, String> map = data.stream() 
            .map(s -> s.split("=")) 
            .collect(Collectors.toMap(s -> s[0], s -> s[1], (a, b) -> a, HashMap::new)); 
+0

私は間違いなくそれを試みましたが、コンパイルしません。 アレイタイプが必要です。見つかった: 'T' エラー:java:互換性のない型:推論変数Rに互換性のない境界がある 等価制約:java.util.Map 上限:java.util。 HashMap 、java.lang.Object – theanos

+0

答えを更新しました。 'HashMap ' –

+3

にキャストを追加しました。これは 'Collectors.toMap'が' HashMap'ではなく 'Map'を返すためです。 HashMapの使用を主張していたとしても、オーバーロードされた 'Collectors.toMap'実装の1つを呼び出して、カスタムマップサプライヤを指定することができます。 'Collectors.toMap(s - > s [0]、s - > s [1]、(a、b) - > a、HashMap :: new)'の行を見てみましょう。ただし、重複するマップキーは暗黙のうちに無視されます。 –

関連する問題