Tener problemas para acceder y hacer referencia a HashMap en Java

Estoy tratando de escribir un programa que maneje el almacenamiento de estudiantes y asignaturas correspondientes, pero soy relativamente nuevo en las listas de Java y tengo problemas para que la clase almacene y envíe a los estudiantes y las asignaturas. Hasta ahora puedo conseguir que almacene a un estudiante y una clase, pero no tomaré varios, o solo devolverá el más reciente agregado.

private static Map<String, Set<String>> cohort = new HashMap<~>();

public static void signOn(String class, String student) {
    Set<String> studentSet = new HashSet<String>();
    studentSet.add(student);
    cohort.put(class, studentSet);
}

public static Map<String, Set<String>> getCohort() {
    return cohort;
}

Cuando llamo getCohort(), intento que devuelva todos los estudiantes que se han registrado, pero solo devuelve el estudiante más reciente agregado. No estoy seguro de si me estoy perdiendo algo simple, pero parece que no puedo obtenerlo. bien, cualquier ayuda sería muy apreciada.

Respuesta 1

en signOncuando se va a añadir un nuevo estudiante, que está creando un nuevo conjunto, la adición de un estudiante a él y luego anula cualquier conjunto que ya estaba allí. Esto significa que siempre tendrá un solo estudiante allí.

Lo que debe hacer es obtener primero el grupo actual de estudiantes en una clase y luego agregarlos a ellos.

Código de ejemplo:

    public static void signOn(String class, String student)
    {
        Set<String> studentSet = cohort.get(class);
        if (studentSet == null) {
            studentSet = new HashSet<String>();
            cohort.put(class, studentSet);
        }
        studentSet.add(student);
    }

Eso debería funcionar como studentSet será una referencia al studentSet que se almacena en cohorte. Acabo de escribir eso de memoria, así que no prometo que funcione en el primer intento, pero esa es la idea general.

Respuesta: 2

Siempre está creando un nuevo conjunto, anulando así el conjunto ya existente que guardó en cohorte.

Intenta lo siguiente:

Set<String> studentSet = cohort.get(class);
if(studentSet == null){
  studentSet = new HashSet<String>();
  cohort.put(class, studentSet);
}
studentSet.add(student);

Como nota al margen, me gustaría agregar que 'clase' no es el mejor nombre para su variable String, ya que es una palabra reservada de Java.

Respuesta: 3

¿Hay una manera fácil de verificar si dos clases implementan una interfaz común? Estoy usando IntelliJ y llamo a una biblioteca de Java (cliente REST de alto nivel de Elastic Java) desde algún código de Kotlin. SearchHit y ...

Recientemente actualicé netbeans de 7.1.2 a 7.2. Desafortunadamente, no puedo encontrar la manera de activar las vistas de depuración, como la lista de puntos de interrupción, la pila de llamadas y la lista de hilos. En netbeans 7 ...

¿Cuáles son los URI disponibles que podrían especificarse para los atributos adicionales de hiedra? Las páginas del manual de Ivy nos permiten usar los xmlns de URI: e = "http://ant.apache.org/ivy/extra" que nos permitiría ...

Tengo un archivo con el contenido "¡Hola, Tom! \ N". Es decir, hay un carácter de nueva línea al final del archivo. Cuando este código se ejecuta en ese archivo: Archivo de archivo = archivo nuevo (path.toString ()); ...