是否有更好的方法将'='
分隔的字符串数组解析为地图。
MutableMap<String, String> config = new UnifiedMap<>();
ArrayIterate.collectWith(data.split(","), String::split, "=")
.each(v -> config.put(v[0], v[1]));
答案 0 :(得分:0)
我不确定以下内容是否与您的输入相符,但我认为它可能在结构上类似于您的两次分割调用。您可以使用toMap
稍微简化代码,而不是构建UnifiedMap
并使用each
。
此解决方案使用上面的ArrayIterate
:
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
,可以使代码更易于阅读,具体取决于您的标准。
MutableMap<String, String> config = ArrayAdapter.adapt(data.split(","))
.collectWith(String::split, "=")
.toMap(a -> a[0], a -> a[1]);
使用ArrayAdapter可以让你调用collectWith()lazy而不是eager,如果逗号分隔的数组有大量数据,这可能是有益的。
MutableMap<String, String> config = ArrayAdapter.adapt(data.split(","))
.asLazy()
.collectWith(String::split, "=")
.toMap(a -> a[0], a -> a[1]);
您也可以将Arrays.stream()
与EC中提供的Collectors2
一起使用,但是您不能像map
一样使用方法参考collectWith
。
MutableMap<String, String> config = Arrays.stream(data.split(","))
.map(string -> string.split("="))
.collect(Collectors2.toMap(a -> a[0], a -> a[1]));