Iterar a través de una matriz 2D y los valores puestos para asignar

elección:

Quiero iterate aunque esta matriz 2d y valores de poner en un mapa de las cadenas como claves y una lista de cadenas Básicamente tengo esto, pero no soy capaz de modificar la lista de valores para agregar otro valor en el caso de que ya existe una clave

  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;

Aquí está la matriz

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

iwould gusta mantener este registro en un mapa donde los valores son lista de grados por un estudiante

Gracias.

Azro:

El primer problema viene de Java List.add () UnsupportedOperationException , que le da un devuelve una lista de tamaño fijo , es necesario envolverlo en una ArrayListcomonew ArrayList<>(Arrays.asList(...))

Pero, además, no es necesario duplicar reiterar la matriz, como se conoce la estructura de, él, sólo iterar a las primeras matrices, y acceso a los 2 valores:

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));
    }
}

Utilizando Streams

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=345182&siteId=1
Recomendado
Clasificación