java8转换字符串数组来映射(奇数索引是键,偶数索引是值)

zhu*_*wei 4 java java-8

现在我有一个String数组,

String[] a= {"from","a@a.com","to","b@b.com","subject","hello b"};
Run Code Online (Sandbox Code Playgroud)

从命令行参数.

我想将它转换为Map,

{"from":"a@a.com","to":"b@b.com","subject":"hello b"}
Run Code Online (Sandbox Code Playgroud)

在java8中是否存在方便的方式来实现这一点?现在我的方式是

Map<String,String> map = new HashMap<>();
for (int i = 0; i < args.length; i+=2) {
    String key = args[i].replaceFirst("-+", ""); //-from --> from
    map.put(key, args[i+1]);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 11

您可以使用a IntStream来迭代数组的索引(这是为了每次处理数组的两个元素所必需的)并使用Collectors.toMap收集器.

IntStream将包含每对输入阵列的元件的一个对应的索引.如果数组的长度为奇数,则将忽略最后一个元素.

Map<String,String> map = 
    IntStream.range(0,a.length/2)
             .boxed()
             .collect(Collectors.toMap(i->a[2*i].replaceFirst("-+", ""),
                                       i->a[2*i+1]));
Run Code Online (Sandbox Code Playgroud)