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.

Manejo de datos de HashMultimap

Tengo un HashMultimap

Multimap<string, string=""> map = HashMultimap.create();

Los datos que pongo en el mapa son

map.put("cpu", "i9");
map.put("hang", "MSI");
map.put("hang", "DELL");
map.put("hang", "DELL");
map.put("cpu", "i5");
map.put("hang", "HP");
map.put("cpu", "i7");

Tengo un flujo

String joinString = map.entries().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(" OR "));

Necesito que la salida sea

(hang=HP OR hang=MSI OR hang=DELL) AND (cpu=i9 OR cpu=i5 OR cpu=i7)

Necesito un AND entre las claves. ¿Cómo puedo hacer eso?</string,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un AND entre las claves, puedes agrupar las entradas por sus claves utilizando el método Collectors.groupingBy() y luego unir los valores de cada grupo con un OR utilizando el método Collectors.joining(). Finalmente, puedes unir los grupos con un AND utilizando el método Collectors.joining():

    String joinString = map.entries().stream()
            .collect(Collectors.groupingBy(
                    Map.Entry::getKey,
                    Collectors.mapping(Map.Entry::getValue, Collectors.joining(" OR ", "(", ")"))))
            .entrySet().stream()
            .map(e -> e.getKey() + "=" + e.getValue())
            .collect(Collectors.joining(" AND "));
    

    Esto producirá la salida deseada:

    (hang=HP OR hang=MSI OR hang=DELL) AND (cpu=i9 OR cpu=i5 OR cpu=i7)
    

Comments are closed.