【发布时间】:2017-02-15 17:18:59
【问题描述】:
我想将 [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}
那我想把它转成java8流式吗?怎么样?
【问题讨论】:
-
这种转变的目的是什么?
-
只是为了学习。 @AndrewTobilko
-
有一些库可以让这变得更容易,例如StreamEx
-
@PatrickParker,
EntryStream.ofPairs做了不同的事情:它创建了所有可能的配对。在这里你最终会得到k1=>v1、k1=>k2、k1=>v2、v1=>k2、v1=>v2、k2=>v2。 -
@PatrickParker,当然有办法:StreamEx.ofSubLists。如果您喜欢,请继续:
StreamEx.ofSubLists(params, 2).toMap(list -> (String)list.get(0), list -> list.get(1)).
标签: functional-programming java-8 java-stream