合并两个Long类型的列表,并添加到Java 8中的现有地图

时间:2018-08-28 10:55:48

标签: java lambda collections java-8 java-stream

我有两个类型均为Long的列表,例如ListAListB

我想将它们合并到Map<Long, Long>中,以使ListA成为键,而ListB成为值。 这里的要点是我想将这些键值对添加到现有映射中。

我知道如何解析列表并返回一个新的地图对象(使用Collectors.toMap)。我的问题是要添加到现有地图中,可能类似于:

Map<Long, Long> map = new HashMap<Long, Long>;
// ... entries added to map
ListA.stream().forEach(a -> {
    map.put(a, <get 0th element of ListB somehow>);
});

谢谢!

2 个答案:

答案 0 :(得分:2)

假设这些列表的大小相同:

 Map<Long, Long> map = IntStream.range(0, listA.size())
          .boxed()
          .collect(Collectors.toMap(listA::get, listB::get));


yourOtherMap.putAll(map);

答案 1 :(得分:1)

尝试此选项:

Map<Long, Long> map = new HashMap<>();
IntStream.range(0, ListA.size())
    .forEach(i -> {
        map.put(ListA.get(i), ListB.get(i));
    });

Demo

但是,老实说,使用常规的Java 8之前的增强for循环在这里没什么错:

// assuming both lists have the same size
for (int i=0; i < ListA.size(); ++i) {
    map.put(ListA.get(i), ListB.get(i);
}

它简洁,易于阅读和维护,不会引起任何人审查您的代码的麻烦。