如何将一对整数的列表添加为映射中的值,并将key作为该对中的第一个值-Java

如何将一对整数的列表添加为映射中的值,并将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) {

我想知道我是如何实现这个场景的——例如,我有一个一对整数(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) {
            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())));