Android - Como comparar contenido de dos HashMap y sustituir el valor de uno de ellos

 
Vista:
Imágen de perfil de Roberto
Val: 43
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como comparar contenido de dos HashMap y sustituir el valor de uno de ellos

Publicado por Roberto (16 intervenciones) el 03/05/2021 15:43:04
Hola

Estoy intentado comparar el contenido de dos colecciones HasMap<String, String>(), y souy incapaz, pruebo una cosa y otra, y me van saliendo resultados, pero nunca el que deseo

Veamos:
Tengo ésta colección que almacena número de socio y nombre del socio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dataN = new ArrayList<Map<String,String>>();
 
        try {
            Statement stUs = miConexion.metodoConexionBD().createStatement();
            ResultSet ra = stUs.executeQuery("select f_ConsumerNO, f_ConsumerName from t_b_Consumer");
 
            while (ra.next()) {
                Map<String, String> dtnameN = new HashMap<String, String>();
                dtnameN.put("Numero", ra.getString("f_ConsumerNO"));
                dtnameN.put("Nombre", ra.getString("f_ConsumerName"));
                dataN.add(dtnameN);
            }
            ra.close();
            stUs.close();
:

por otra parte, tengo ésta otra colección que almacena las reservas de los socios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Statement stn = miConexion.metodoConexionBD().createStatement();
            ResultSet rst = stn.executeQuery("select * from Reservas where SalaID = " + 1 + " order by ID_Reserva Desc");
data = new ArrayList<Map<String,String>>()
 
            while (rst.next()) {
                Map<String, String> dtname = new TreeMap<String, String>();
                dtname.put("Sala", rst.getString("SalaID"));
                dtname.put("Fecha", rst.getString("FechaReserva"));
                dtname.put("Hora1", rst.getString("HoraReserva"));
                dtname.put("Socio", rst.getString("SocioID"));
                dtname.put("Hora2", rst.getString("HoraReserva"));
                dtname.put("Hora3", rst.getString("HoraReserva"));
                data.add(dtname);
            }
            rst.close();
            stn.close();

estoy intentando comparar los valores de numero en dataN y Socio en data
1
2
3
4
5
6
7
8
9
int mayor = dataN.size();
            if (data.size() > dataN.size()) {
                mayor = data.size();
            }
            for (int i = 0; i < mayor; i++){
                if (dataN.get(i).containsValue("Numero") == (data.get(i).containsValue("Socio"))){
                    data.get(i).put("Socio", String.valueOf(dataN.get(i).containsValue("Nombre")));
                }
            }

La intentación sería, que en lugar de darme el número de socio almacenado en "data", me diera el nombre que corresponda a ese número de socio y está almacenado en "dataN", sustituyendo el número por el nombre en la colección "data", que es la que envío luego al listView

Alguna idea ?
Alguien me puede ayudar ?

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Roberto
Val: 43
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como comparar contenido de dos HashMap y sustituir el valor de uno de ellos

Publicado por Roberto (16 intervenciones) el 05/05/2021 10:19:01
Bueno, sigo investigando

ya he dado con media solución, por fin he conseguido extraer los datos que necesito para realizar la comparación de valores

ahora me falta algo que quizás sea muy básico, pero que se me escapa, sería la iteración por todos los registros del hashmap

tengo el siguiente código, pero entro en un bucle del primer registro. No se como aumentar los ciclos del for.
dtnameN.get("Numero"); Si le pongo dtnameN(i) me da error
dtnameN.get("Numero"); Si le pongo dtnameN.get(i, "Numero") no lo admite
Estoy algo perdido, alguna ayuda ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//en este for recorro el hashmap de las reservas
for (int i = 0; i < data.size(); i++) {
                //aqui obtengo el numero del socio del primer hashmap
                String datoS1 = dtnameN.get("Numero");
               //aqui elimino los espacios en blanco del número de socio del primer hashmap, pues de la base de datos, al tener 10 caracteres,           me pone espacios donde no lo cubre el número
                String dato1 = datoS1.replace(" ", "");
               //aqui obtengo el nombre del socio del primer hashmap
                String dato11 = dtnameN.get("Nombre");
                //aqui obtengo el numero del socio del segundo hashmap
                String dato2 = dtname.get("Socio");
                //con este for recorreria a todos los socios contenidos en el primer hashmap
                for (int j = 0; j < dataN.size(); j++) {
                    if (dato1.equals(dato2)) {
                        data.get(j).put("Nombre", dato11);
                    }
                }
            }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Roberto
Val: 43
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como comparar contenido de dos HashMap y sustituir el valor de uno de ellos

Publicado por Roberto (16 intervenciones) el 06/05/2021 14:45:29
Sigo probando cosas tras cambiar un poco el código, ahora me encuentro con algo que me descoloca

ahora pregunto directamente el número de socio enviando éste por parámetro al llamar al método

1
2
3
4
5
6
7
8
9
10
11
12
while (rst.next()) {
    dtname.put("Sala", rst.getString("SalaID"));
    dtname.put("Fecha", rst.getString("FechaReserva"));
    dtname.put("Hora1", rst.getString("HoraReserva"));
    dtname.put("Socio", rst.getString("SocioID"));
    String s = rst.getString("SocioID");
    dtname.put("Hora2", rst.getString("HoraReserva"));
    dtname.put("Hora3", rst.getString("HoraReserva"));
    String nombre = metodoObtenerNombre(s);
    dtname.put("Nombre", nombre);
    data.add(dtname);
}

Pero en el método, es donde me deja de nuevo sin recursos, pues a pesar de hacer un bucle for para recorrer el arraylist de los socios, siempre me coge el mismo, o sea, ésta línea no está funcionando en la iteración del bucle (String dS1 = dataN.get(j).get("Numero");)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public String metodoObtenerNombre(String s){
    String nombre = "";
 
    for (int i = 0; i < contador; i++) {
        String dato2 = s;
        for (int j = 0; j < dataN.size(); j++) {
            String dS1 = dataN.get(j).get("Numero");
            String d1 = dS1.replace(" ", "");
            String dN = dataN.get(j).get("Nombre");
            if (dato2.equals(d1)) {
                nombre = dN;
            }
        }
    }
    return nombre;
}
Alguien me podría explicar que estoyy haciendo mal ? Un saludooooo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar