将2个集合转换为Map

Pan*_*hal 3 java lambda dictionary java-8 java-stream

我有2 ListList<String> aList<String> b相同的大小.

Map<String, String>使用lambdas或其他什么List<String> a键创建Java 8 的最有效方法List<String> b是什么?键是什么?

Java 7方式如下:

Map<String, String> map = new HashMap<String, String>();
for(int i=0;i<a.size();i++)
    map.put(a.get(i), b.get(i));
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 6

由于没有zip操作Stream(并且没有Pair类),一个简单的解决方案是使用IntStream和循环遍历每个的索引List.

Map<String, String> map =
    IntStream.range(0, a.size()).boxed().collect(Collectors.toMap(a::get, b::get));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用提供方法的StreamEx库,zip并具有:

Map<String, String> map = EntryStream.zip(a, b).toMap();
Run Code Online (Sandbox Code Playgroud)

  • 或者没有拳击开销,但不那么简洁:`IntStream.range(0,a.size()).collect(HashMap :: new,(m,i) - > m.put(a.get(i),b. get(i)),Map :: putAll)` (5认同)