2017-05-01 7 views
-1

'='で区切られた文字列をマップに解析するより良い方法がありますか?eclipseコレクションの文字列配列をマップに解析する方が良い

MutableMap<String, String> config = new UnifiedMap<>(); 
     ArrayIterate.collectWith(data.split(","), String::split, "=") 
        .each(v -> config.put(v[0], v[1])); 
+0

これはあなたの基準が良いですか? –

+0

サンプル入力を表示できますか? –

+0

@stephen-c - より簡単な方が良い、toMap()は以下のDonaldによって提案されているように、このトリックを行います。 –

答えて

0

次があなたの入力と一致するかどうかはわかりませんが、2つの分割呼び出しに基づいて構造的にはおそらく似ていると思います。 toMapを使用すると、UnifiedMapを構築せずにeachを使用する代わりに、コードを単純化することができます。

String data = "1=one,2=two,3=three"; 

MutableMap<String, String> config = 
     ArrayIterate.collectWith(data.split(","), String::split, "=") 
       .toMap(a -> a[0], a -> a[1]); 

このソリューションは、より良いあなたの基準に応じて読み、コードをより簡単にするArrayAdapter、使用しています:あなたは上記の持っているよう

このソリューションは、ArrayIterate使用しています。

MutableMap<String, String> config = ArrayAdapter.adapt(data.split(",")) 
     .collectWith(String::split, "=") 
     .toMap(a -> a[0], a -> a[1]); 

あなたのカンマで区切られた配列は、大量のデータを持っている場合に有益でありうる、代わりに熱心なの怠惰な)(それが可能あなたがcollectWithへの呼び出しを行うために作るだろうArrayAdapterを使用します。

MutableMap<String, String> config = ArrayAdapter.adapt(data.split(",")) 
     .asLazy() 
     .collectWith(String::split, "=") 
     .toMap(a -> a[0], a -> a[1]); 

また、ECで利用可能Collectors2Arrays.stream()を使用することができますが、あなたはcollectWithを持っているとして、あなたはmapとメソッドのリファレンスを使用することはできません。

MutableMap<String, String> config = Arrays.stream(data.split(",")) 
     .map(string -> string.split("=")) 
     .collect(Collectors2.toMap(a -> a[0], a -> a[1])); 
+0

ありがとう、これは理にかなっています。 –

関連する問題