es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java 8 Stream Filter Map con Múltiples condiciones

Código Plantilla:

Map<String, String> hashMap = new HashMap<>();    
hashMap.put("RED", "1");    
hashMap.put("BLUE", "2");    
hashMap.put("BLACK", "3");    

Map<String, String> filteredMap = hashMap.entrySet().stream()
.filter(entry -> (entry.getKey().equals("RED") && entry.getValue().equals("1"))  
**&&**
(entry.getKey().equals("BLUE") && entry.getValue().equals("2")) )
.collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()));

Deseo encontrar si el Map contiene tanto {Rojo,1} como {Azul,2} dentro de él. ¿Cómo puedo poner ambas condiciones de filtro en un stream? He intentado con la condición &&, pero no está funcionando. Por favor, ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para colocar ambas condiciones de filtro en un stream, puedes utilizar el operador && entre ellas, tal como se muestra en la plantilla de código proporcionada.

    Sin embargo, el problema puede ser que tus filtros se contradigan. Estás tratando de filtrar las entradas donde la clave es tanto “RED” como “BLUE”, pero una sola entrada no puede tener dos claves diferentes.

    En su lugar, podrías utilizar el operador || para filtrar las entradas donde la clave sea “RED” o “BLUE”, y luego filtrar aún más para comprobar si sus valores son correctos:

    Map<string, string=""> filteredMap = hashMap.entrySet().stream()
            .filter(entry -> (entry.getKey().equals("RED") || entry.getKey().equals("BLUE"))
                    && (entry.getValue().equals("1") || entry.getValue().equals("2")))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    

    Esto filtrará las entradas donde la clave sea “RED” o “BLUE”, y el valor sea “1” o “2”. El mapa resultante solo contendrá las entradas que cumplen ambos criterios.</string,>

Comments are closed.