在Java中将2D arraylist转换为hashmap

在Java中将2D arraylist转换为hashmap,java,arraylist,hashmap,Java,Arraylist,Hashmap,我有一个关于在java中将2d arraylist转换为hashmap的小问题。在读取为2d arraylist后,我有一个数据集如下所示: 0 1 0 2 1 2 1 3 第一列代表id,第二列代表项目。我想在java中使用hashmap创建频繁项集,输出如下 1 0 2 0 1 3 1 我使用这些代码,但遇到一些问题: HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, A

我有一个关于在java中将2d arraylist转换为hashmap的小问题。在读取为2d arraylist后,我有一个数据集如下所示:

0 1

0 2

1 2

1 3
第一列代表id,第二列代表项目。我想在java中使用hashmap创建频繁项集,输出如下

1 0

2 0 1

3 1
我使用这些代码,但遇到一些问题:

HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();
for(Integer elem : data){
        map.put(elem[1], elem[0]);
}
HashMap map=newhashmap();
for(整数元素:数据){
map.put(elem[1],elem[0]);
}
其中数据是我的2d arraylist

错误消息说

incompatible types: ArrayList<Integer> cannot be converted to Integer
    for(Integer elem : data){
                       ^
不兼容类型:ArrayList无法转换为整数
for(整数元素:数据){
^
感谢您的帮助!

您可以这样做:

List<List<Integer>> inputData = ...

Map<Integer, List<Integer>> dataAsMap = new HashMap<>();
for(List<Integer> row : data){
  Integer id = row.get(0);
  Integer item = row.get(1);
  List<Integer> rowInMap = dataAsMap.get(item);
  if (rowInMap == null) {
    rowInMap = new ArrayList<>(); 
    dataAsMap.put(item, rowInMap);
  }
  rowInMap.add(id);
}
列表输入数据=。。。
Map dataAsMap=newhashmap();
用于(列表行:数据){
整数id=row.get(0);
整数项=行。获取(1);
List rowInMap=dataAsMap.get(项);
if(rowInMap==null){
rowInMap=newarraylist();
数据映射放置(项目,行映射);
}
rowInMap.add(id);
}
一些注意事项:

  • 您应该使用接口类型列表,映射…作为类型(您在创建新对象时仅指定特定的impl类型,例如HashMap!)
  • 您的问题是:当使用for each on List of List(就像您所做的那样)…您不会得到单独的“单元格”,而是得到列表[迭代列表…每次迭代产生一个列表!]
  • 因此,剩下的就是获取内部列表的元素,并将它们推入映射。需要注意的另一部分是:您要创建列表对象的映射。这些列表对象也需要创建


    (我没有通过编译器运行上述内容,因此请注意拼写错误,但一般来说,它应该告诉您需要知道的内容。如果您不了解代码的作用,我建议添加println语句或在调试器中运行它)

    以下是一种简单的方法:

  • 拍摄
    Map
  • 迭代你的Arraylist
  • 查看键是否已存在于映射中。检索列表并在键存在时将值添加到列表中,或者使用该值创建一个新列表
  • 节目:

    class FooBar {
        public static void main (String[] args) throws Exception {
            int[][] data = {{0,1}, {0,2}, {1,2}, {1,3}};
            Map<Integer, List<Integer>> myMap = new HashMap<>();
    
            for(int i = 0; i < 4; i++) {
                List<Integer> values = myMap.containsKey(data[i][0]) ?
                                       myMap.get(data[i][0]) : new ArrayList<>();
                values.add(data[i][1]);
                myMap.put(data[i][0], values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    
    class FooBar {
        public static void main (String[] args) throws Exception {
            /* Input Data */
            List<List<Integer>> input = new ArrayList<>();
            input.add(new ArrayList<Integer>(){{add(0); add(1);}});
            input.add(new ArrayList<Integer>(){{add(0); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(3);}});
    
            Map<Integer, List<Integer>> myMap = new HashMap<>();
            for(int i = 0; i < input.size(); i++) {
                List<Integer> values = myMap.containsKey(input.get(i).get(0)) ?
                                       myMap.get(input.get(i).get(0)) : new ArrayList<>();
                values.add(input.get(i).get(1));
                myMap.put(input.get(i).get(0), values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    
    这只是为了说明基本方法。显然,您可以根据需要对其进行修改。例如,您可以使用
    String
    而不是
    List
    ,并选择将值附加到
    字符串中,而不是将其添加到
    列表中

    编辑:

    class FooBar {
        public static void main (String[] args) throws Exception {
            int[][] data = {{0,1}, {0,2}, {1,2}, {1,3}};
            Map<Integer, List<Integer>> myMap = new HashMap<>();
    
            for(int i = 0; i < 4; i++) {
                List<Integer> values = myMap.containsKey(data[i][0]) ?
                                       myMap.get(data[i][0]) : new ArrayList<>();
                values.add(data[i][1]);
                myMap.put(data[i][0], values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    
    class FooBar {
        public static void main (String[] args) throws Exception {
            /* Input Data */
            List<List<Integer>> input = new ArrayList<>();
            input.add(new ArrayList<Integer>(){{add(0); add(1);}});
            input.add(new ArrayList<Integer>(){{add(0); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(3);}});
    
            Map<Integer, List<Integer>> myMap = new HashMap<>();
            for(int i = 0; i < input.size(); i++) {
                List<Integer> values = myMap.containsKey(input.get(i).get(0)) ?
                                       myMap.get(input.get(i).get(0)) : new ArrayList<>();
                values.add(input.get(i).get(1));
                myMap.put(input.get(i).get(0), values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    
    这里是一个示例程序,输入为
    List
    。这里我假设此列表的名称为
    input

    节目:

    class FooBar {
        public static void main (String[] args) throws Exception {
            int[][] data = {{0,1}, {0,2}, {1,2}, {1,3}};
            Map<Integer, List<Integer>> myMap = new HashMap<>();
    
            for(int i = 0; i < 4; i++) {
                List<Integer> values = myMap.containsKey(data[i][0]) ?
                                       myMap.get(data[i][0]) : new ArrayList<>();
                values.add(data[i][1]);
                myMap.put(data[i][0], values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    
    class FooBar {
        public static void main (String[] args) throws Exception {
            /* Input Data */
            List<List<Integer>> input = new ArrayList<>();
            input.add(new ArrayList<Integer>(){{add(0); add(1);}});
            input.add(new ArrayList<Integer>(){{add(0); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(2);}});
            input.add(new ArrayList<Integer>(){{add(1); add(3);}});
    
            Map<Integer, List<Integer>> myMap = new HashMap<>();
            for(int i = 0; i < input.size(); i++) {
                List<Integer> values = myMap.containsKey(input.get(i).get(0)) ?
                                       myMap.get(input.get(i).get(0)) : new ArrayList<>();
                values.add(input.get(i).get(1));
                myMap.put(input.get(i).get(0), values);
            }
    
            System.out.println(myMap);
        }
    }
    
    {0=[1, 2], 1=[2, 3]}
    

    非常感谢!我真的很感谢!非常感谢!但是如果输入数据是arraylist呢?@lixx3013如果它是
    arraylist
    ,那么你必须迭代它,而不是
    int[][]
    。看看修改后的答案。@lixx3013如果你认为这解决了你的问题,请接受答案。