[英]I need help creating this Java Map?
我有一個包含這些數據的文本文件:
a, 0, 10, 7,
b, 22, 0, 13,
c, 4, 12, 0
我想創建一個 Map,鍵是字母,值是與該字母關聯的int
值的ArrayList<Integer>
。
這是我嘗試過的:
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);
}
map 的關鍵部分通過獲取字母來工作,但我不確定如何正確地將值實現為ArrayList <Integer>
值。
您只需要一個循環來遍歷行並獲取第一個 + 剩余的列
例如,
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);
}
注意:您可能需要刪除每行末尾的逗號
好吧,這是一種有些不同的方法。
Files.lines
方法 stream 行。String sourceFile = "<Your file here>";
Map<String, List<Integer>> map;
try {
map = Files.lines(Path.of(sourceFile))
.map(String::trim)
.map(str -> str.split("\\s*,\\s*"))
.collect(Collectors.toMap(a -> a[0], a -> Arrays
.stream(Arrays.copyOfRange(a, 1, a.length))
.map(Integer::valueOf)
.collect(Collectors.toList()),
(list1,list2)-> {list1.addAll(list2); return list1;}));
} catch (IOException fne) {
fne.printStackTrace();
}
map.entrySet().forEach(System.out::println);
所以給定一個如下文件:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.