選択:
私は、文字列のキーとリストとして文字列の地図には、この2次元配列とプット値ものの反復処理したい基本的に私はこれを持っているが、私は、キーがすでに存在する場合には別の値を追加するには、値のリストを変更することはできませんよ
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"}};
値は一人の学生によってグレードのリストですマップでこの記録を保存するようにiwould
ありがとうございました。
azro:
最初の問題は、から来ているにUnsupportedOperationException)は、Java List.add(あなたに与え、固定サイズのリストを返しますが、あなたがそれをラップする必要があります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())));