Cómo combinar los objetos de la lista con datos de mapa con la condición y guardar en otro mapa utilizando Java 8 Streams

jhenya-D:

En busca de solución cómo hacer coincidir los objetos de la lista con datos de mapa con la condición de si el campo del objeto se inicia con valores de mapa y guardar en otro mapa

tengo mapa con algunos datos

Map<String, String> dataMap = new HashMap()
    dataMap.put("d1", "DATA1")
    dataMap.put("d2", "DATA2")
    dataMap.put("d3", "DATA3")

y una lista de objetos DataElement

    List<DataElement> elements = new ArrayList()

elements.add(new DataElement("TEXT1"))
elements.add(new DataElement("TEXT2"))
elements.add(new DataElement("DATA1_text1"))
elements.add(new DataElement("DATA2_text2"))


class DataElement {
            public field;


        public DataElement(String text){
            this.field = text
        }

        public getField(){
            return this.field
        }


    }

I'am y tratando de conseguir nuevo mapa de donde las claves son valores de primer mapa y los valores son objetos (campo) de la Lista con la condición de campo si se inicia con objeto valor del mapa: resultado debe ser:

[d1=DATA1_text1, d2=DATA2_text2]  

Mi código:

    Map<String, String> collect2 = dataMap.entrySet().stream()
            .filter({ map -> elements.stream()
                                .anyMatch({ el -> el.getField().startsWith(map.getValue()) })})
            .collect(Collectors.toMap(KEY, VALUE))
Eran :

Con suerte llegué a la pregunta correcta:

Map<String, String> collect2 = 
    dataMap.entrySet()
          .stream()
          .map(e -> elements.stream()
                            // this will search for the first element of the List matching
                            // the value of the current Entry, if exists
                            .filter(el -> el.getField().startsWith(e.getValue()))
                            .findFirst()
                            // this will create a new Entry having the original key and the
                            // value obtained from the List
                            .map(el -> new SimpleEntry<>(e.getKey(),el.getField()))
                            // if findFirst found nothing, map to a null element
                            .orElse(null))
          .filter(Objects::nonNull) // filter out all the nulls
          .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Que está procesando las entradas de la entrada Map, y mantener sólo las entradas que tienen un valor que coincide con un elemento de la List(a través filter(), aunque tiene algunos errores de sintaxis), pero es necesario que maplas entradas de entrada en nuevas entradas que contienen el nuevo valor deseado.

Este código anterior produce el Map

{d1=DATA1_text1, d2=DATA2_text2}

para la entrada dada.

Supongo que te gusta

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