gpt4 book ai didi

java - 迭代二维数组并将值放入映射中

转载 作者:行者123 更新时间:2023-12-01 16:42:24 25 4
gpt4 key购买 nike

我想迭代这个二维数组并将值作为键和字符串列表放入字符串映射中 基本上我有这个,但在 key 已经存在的情况下我无法修改值列表以添加另一个值

  static float bestAverageStudent(String[][] students) {
Map<String, List<String>> grades = new HashMap<>();
for (int row = 0; row < students.length; row++) {
for (int col = 0; col < students[row].length; col++) {
if (grades.get(students[row][0]) == null) {
grades.put(students[row][0], Arrays.asList(students[col][1]));
} else {
List<String> strings1 = grades.get(students[row][0]);
strings1.add( students[col][1]); //It fails when i try to add to the list
grades.put(students[row][0], new ArrayList<>(strings1));
}
}
}
System.out.println(grades);
return 0;

这是数组

 public static String students[][] = new
String[][]{{"jerry", "65"},
{"bob", "91"},
{"jerry", "23"},
{"Eric", "83"}};

我想将此记录保留在 map 中,其中值是一名学生的成绩列表

谢谢

最佳答案

第一个问题来自Java List.add() UnsupportedOperationException ,它给你一个返回一个固定大小的列表,你需要将它包装在 ArrayList 中喜欢 new ArrayList<>(Arrays.asList(...))

而且,您不需要对数组进行双重迭代,因为您知道它的结构,只需迭代到第一个数组,并访问 2 个值:

Map<String, List<String>> grades = new HashMap<>();
for (int row = 0; row < students.length; row++) {
String name = students[row][0];
String grade = students[row][1];
if (!grades.containsKey(name)) {
grades.put(name, new ArrayList<>(Arrays.asList(grade)));
} else {
List<String> strings1 = grades.get(name);
strings1.add(grade);
grades.put(name, new ArrayList<>(strings1));
}
}

使用Streams

Map<String, List<String>> grades = Arrays.stream(students)
.collect(groupingBy(values -> values[0], mapping(values -> values[1], toList())));

关于java - 迭代二维数组并将值放入映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60798767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com