Lógica compleja de transmisión de un LinkedList

user1660256:

Estoy tratando con un poco compleja de la lógica que no puedo hacerlo bien. Estoy tratando de reducir una lista que contiene una lista de propiedades en un objeto fusionado uno, la eliminación de duplicados de llaves .

Decir que tengo una Configclase con los siguientes elementos:

private int index;
private String name;
private Map<String, String> properties;

Este objeto estará en una lista enlazada de objetos, List<Config>. Si el Configobjeto en el índice 5 tiene una clave / valor propertiesde "version = 2", pero el Configobjeto en el índice 1 tiene propertiesque contienen "version = 1", que necesita la propiedad en el índice de 5 a ganar. Así que quiero una última Config(me preocuparé por el nameelemento más adelante) que tiene propiedades fusionadas que reflejan las últimas propiedades en la corriente.

¿Estoy pidiendo demasiado en una sola operación? Hasta ahora he llegado con algo como esto, pero no se compila:

configList.stream()
        .map(it -> it.getProperties())
        .collect(Collectors.toCollection(() -> 
            new TreeSet<>(Comparator.comparing(???))))

Cualquier ayuda apreciada!

nieve:

Si entiendo bien la pregunta, desea obtener todas las propiedades y las Combinar en un mapa y si hay duplicados, que desea dar prioridad a la propiedad del mapa con el valor más alto índice en config.

Esta es la solución que se me ocurrió.

Map<String, String> properties = configList.stream()
                .sorted(Comparator.comparingInt(Config::getIndex)) //Sort the configs in ascending order by indexes.
                .flatMap(config -> config.properties.entrySet().stream()) //flat map all the properties
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right)); //collect to a map

Esto Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right)es donde sucede la magia.

Dado que ya se solucionó las configuraciones de índice, que siempre tendrá el valor con mayor índice de configuración en la parte inferior y todo lo que hacemos es sobrescribir la clave existente cuando se produce llave duplicada.

Supongo que te gusta

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