如何使用 <String, List<Integer>> 在哈希图中存储值

我有以下数组


我正在尝试将数组信息保存在哈希图中。


String[][] students = {{"Bobby", 87}, {"Charles", 100}, {"Eric", 64}, 

                               {"Charles", 22}};


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

List<Integer> score1 = new ArrayList<>();

for(int i=0; i<students.length; i++) {

    score1.add(students[i][1]);

    map.put(students[i][0], score1);

}

但我想将信息存储在地图键值对中。


预期输出:


"Bobby" -> 87

"Charles" -> 100,22

"Eric" -> 64

实际输出:


{Charles=[87, 100, 64, 22], Eric=[87, 100, 64, 22], Bobby=[87, 100, 64, 22]}

我怎样才能做到这一点?


慕勒3428872
浏览 178回答 3
3回答

千万里不及你

使用 java-8,您可以在一行中使用以下所有内容:Map<String,&nbsp;List<Integer>>&nbsp;collect1&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.stream(students).collect(Collectors.groupingBy(arr&nbsp;->&nbsp;arr[0],&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.mapping(arr&nbsp;->&nbsp;Integer.parseInt(arr[1]),&nbsp;Collectors.toList())));在这里,我们按学生姓名的第 0 个索引分组,第 1 个索引将保存学生的分数。

智慧大石

您需要区分已经存在的和新的数组:&nbsp;List<Integer> currScore = map.get(students[i][0])&nbsp;if (currScore != null) {&nbsp; &nbsp;currScore.add(students[i][1]);&nbsp;} else {&nbsp; &nbsp; List<Integer> newScore = new ArrayList<>();&nbsp; &nbsp; newScore.add(students[i][1]);&nbsp; &nbsp; map.put(students[i][0], newScore);&nbsp;}还将变量名称更改为有意义的名称

慕的地6264312

String[][] students = { { "Bobby", "87" }, { "Charles", "100" }, { "Eric", "64" }, { "Charles", "22" } };Map<String, List<Integer>> map = new HashMap<>();Stream.of(students).forEach(student -> map.computeIfAbsent(student[0], s -> new ArrayList<>()).add(Integer.parseInt(student[1])));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java