在Java中将2D arraylist转换为hashmap
我有一个关于在java中将2d arraylist转换为hashmap的小问题。在读取为2d arraylist后,我有一个数据集如下所示:在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
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);
}
一些注意事项:
(我没有通过编译器运行上述内容,因此请注意拼写错误,但一般来说,它应该告诉您需要知道的内容。如果您不了解代码的作用,我建议添加println语句或在调试器中运行它)以下是一种简单的方法:
Map
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如果你认为这解决了你的问题,请接受答案。