java - 遍历二维数组并将值放入映射
问题描述
我想迭代这个二维数组并将值作为键和字符串列表放入字符串映射中基本上我有这个但我无法修改值列表以在键已经存在的情况下添加另一个值
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"}};
我想将此记录保存在地图中,其中值是一个学生的成绩列表
谢谢
解决方案
第一个问题来自Java List.add() UnsupportedOperationException
,它为您提供Returns a fixed-size list,您需要将其包装在ArrayList
likenew 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())));
推荐阅读
- r - R:将R中的日期格式从同一天的01:00更改为24:00
- ruby - 无法将现有付款资料设置为客户的默认付款资料
- python - 遍历字典以从键值对中查找值
- html - 当我更改窗口大小时,为什么我的正文文本与我的图像重叠?
- r - R函数可以像多米诺骨牌一样链接对?
- python - 如何在同一作业完成后再次运行该 cronjob
- powershell - Powershell 查找和移动受密码保护的 PDF 文件
- html - HTML 输入元素重叠绝对导航栏
- python - 使用 ACR1252 和 pyscard 对尾随块中的密钥进行 Mifare 4K 更改返回错误“99”
- javascript - 听从 vanilla JS 准备好的 Angular