如何将一对整数的列表添加为映射中的值,并将key作为该对中的第一个值-Java
我想知道我是如何实现这个场景的——例如,我有一个一对整数(a,b)的列表 [0,3]、[0,3]、[0,4]、[1,2]、[1,8]、[1,14]、[2,4]、[2,5]、[2,6]-类型配对列表如何将一对整数的列表添加为映射中的值,并将key作为该对中的第一个值-Java,java,dictionary,arraylist,hashmap,Java,Dictionary,Arraylist,Hashmap,我想知道我是如何实现这个场景的——例如,我有一个一对整数(a,b)的列表 [0,3]、[0,3]、[0,4]、[1,2]、[1,8]、[1,14]、[2,4]、[2,5]、[2,6]-类型配对列表 The pairInt functionality is defined like this: class PairInt { int first, second; public PairInt(int first, int second) {
The pairInt functionality is defined like this:
class PairInt {
int first, second;
public PairInt(int first, int second) {
this.first = first;
this.second = second;
}
}
我想将这个整数对添加到一个映射中,这样它的组织方式如下:
{0:[3,3,4],1:[2,8,14],2:[4,5,6]}),也就是说,键0应该有与其关联的值,依此类推
假设我有一个如下声明的HashMap:
HashMap<Integer, List<Integer>> dm = new HashMap<Integer, List<Integer>>();
也就是迭代列表并将其添加到映射中,这样就可以使用上面提到的组织。如何在Java中为上述HashMap结构重现这种行为
建议?
谢谢这里有一种方法 使用
collector.groupingBy
按对中的第一个元素进行分组。该值是作为列表收集的对中的第二个元素
dm = pairInts.stream()
.collect(Collectors.groupingBy(pairInt -> pairInt.first,
Collectors.mapping(pairInt -> pairInt.second, Collectors.toList())));
如果在PairInt
类中有getter,则可以使用方法引用进行编写,如下所示:
pairInts.stream()
.collect(Collectors.groupingBy(PairInt::getFirst,
Collectors.mapping(PairInt::getSecond, Collectors.toList())));
最简单的方法是使用番石榴多重映射(只需将所有对添加为键值对)。你想要的地图是它的特殊视图
pairInts.stream()
.collect(Collectors.groupingBy(PairInt::getFirst,
Collectors.mapping(PairInt::getSecond, Collectors.toList())));