我需要帮助创建这个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]