在eclipse集合中将字符串数组解析为映射的更好方法

时间:2017-05-01 13:24:24

标签: java collections

是否有更好的方法将'='分隔的字符串数组解析为地图。

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

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]));