Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要帮助创建这个Java映射吗?_Java - Fatal编程技术网

我需要帮助创建这个Java映射吗?

我需要帮助创建这个Java映射吗?,java,Java,我有一个包含以下数据的文本文件: a, 0, 10, 7, b, 22, 0, 13, c, 4, 12, 0 我想创建一个映射,其中键是字母,值是与该字母关联的int值的ArrayList 这就是我尝试过的: List<String> list = new ArrayList<String>(); while(scanner.hasNext()){ list.add(scanner.nextLine());

我有一个包含以下数据的文本文件:

a, 0, 10, 7, 
b, 22, 0, 13, 
c, 4, 12, 0  
我想创建一个映射,其中键是字母,值是与该字母关联的
int
值的
ArrayList

这就是我尝试过的:

     List<String> list = new ArrayList<String>();
        while(scanner.hasNext()){
        list.add(scanner.nextLine());
       
    }
     
    Map <String, ArrayList <Integer>> map = new HashMap();
    //map.put(list.get(0).charAt(0), value);
    
}
List List=new ArrayList();
while(scanner.hasNext()){
添加(scanner.nextLine());
}
Map Map=newhashmap();
//map.put(list.get(0)、charAt(0)、value);
}

映射的关键部分是通过获取字母来工作的,但我不确定如何正确地将值实现为
ArrayList
值。

您只需要一个循环就可以遍历这些行并获取第一个+剩余的列

比如说,

Map <String, ArrayList <Integer>> map = new HashMap<>();

while(scanner.hasNext()){
    String[] parts = scanner.nextLine().split("\\s*,\\s*");
    List<Integer> numbers = Arrays.stream(Arrays.copyOfRange(parts, 1, parts.length))
        .map(Integer::parseInt)
        .collect(toList());
    map.put(parts[0], numbers);
}
 
Map Map=newhashmap();
while(scanner.hasNext()){
String[]parts=scanner.nextLine().split(\\s*,\\s*);
列表编号=Arrays.stream(Arrays.copyOfRange(parts,1,parts.length))
.map(整数::parseInt)
.collect(toList());
地图放置(零件[0],编号);
}

注意:您可能需要删除每行末尾的逗号。好吧,这里有一种稍微不同的方法

  • 允许不太具体的格式和尾随空白
  • 使用
    Files.lines
    方法流式传输行
  • 假定文件中有三行以上,因此添加一个合并函数来处理重复键(如果出现)
印刷品

a=[0, 10, 7, 9, 2, 3]
b=[22, 0, 13]
c=[4, 12, 0, 4, 12, 12]


我爱你们两个。在格林威治标准时间3:30+1评论arraylist一期让我们很特别。被认为是女性和异性恋的人喜欢它。我不喜欢编辑别人的答案,但我相信你的意思是
map.put(parts[0],number)
,你可能想使用
compute
方法之一来允许重复的键。@WJS很好。关于重复,地图无论如何都不允许,所以我不确定我是否理解。除非您的意思是合并重复键的值,但这似乎超出了question@OneCricketeer对地图不允许重复。根据我在这个网站上的经验,OP经常不提供完整的故事(通常只是一个疏忽的意外)。因此,如果出现另一行以相同字母开头,我认为需要将其添加到该键的现有列表中。例如,处理三行四个令牌似乎需要很多工作。只是一个想法。我想知道你们是否会有另外一行,也可以以以前使用过的字母开头?在这种情况下,通常会将这些数字合并到与以前使用的键相同的列表中(因为贴图不能有重复的键)。
a, 0, 10, 7, 
b, 22, 0, 13, 
c, 4,12,0 
c,4,12,12
a,9,2,3  
a=[0, 10, 7, 9, 2, 3]
b=[22, 0, 13]
c=[4, 12, 0, 4, 12, 12]