Run*_*Run 5 functional-programming java-8 java-stream
我想将像[k1,v1,k2,v2]这样的列表转换为像{k1:v1,k2:v2}这样的地图.原始代码是:
List<Object> params = Arrays.asList("k1", "v1", "k2", "v2");
Map<String, Object> map = new HashMap<>();
for(int i = 0; i < params.size(); i+=2) {
String key = (String)params.get(i);
Object value = params.get(i + 1);
map.put(key, value);
}
System.out.println(map); // => {k1=v1, k2=v2}
Run Code Online (Sandbox Code Playgroud)
那我想把它转换成java8流式?怎么样?
您可以使用它,但坦率地说,您的 for 循环更具可读性。我会尽量避免首先生成这样的列表,而是使用一个List<SomePair>包含SomePair键和值的列表。
List<Object> params = Arrays.asList("k1", "v1", "k2", "v2");
Map<String, Object> map =
IntStream.range(0, params.size() / 2)
.collect(HashMap::new,
(m, i) -> m.put((String) params.get(i * 2), params.get(i * 2 + 1)),
HashMap::putAll);
System.out.println(map); // => {k1=v1, k2=v2}
Run Code Online (Sandbox Code Playgroud)