Lista estructuración de datos utilizando Java 8 y normalizando en una estructura de mapa

user1697113:

Por lo tanto, todavía soy nuevo en Java 8 y sigue luchando para correlacionar la API de Secuencia con iteración y colecciones tradicional.

Así que tengo una lista de objetos "UserData", que cuenta con 3 propiedades, la lista es todos los datos no normalizados.

 public class UserData {

        private String primaryAccountNumber;
        private String subAccountNumber;
        private String currency;
}

Ejemplo de entrada de datos sería como

PrimaryAccNumber     SubAccNumber   Currency
PA00                 US00           USD
PA01                 US01           USD
PA01                 US02           USD
PA02                 EU00           EUR
PA03                 EU01           EUR
PA04                 CA00           CAD
PA04                 CA01           CAD
null                 IN00           INR
null                 IN01           INR

El resultado esperado debe ser algo como

USD  -> PA00 -> [US00]
        PA01 -> [US01,US02]
EUR  -> PA02 -> [EU00]
     -> PA03 -> [EU01]
CAD  -> PA04 -> [CA00,CA01]
INR  -> null (or dummykey)->[IN00,IN01]

Por lo tanto, yo quiero que se normalizará de tal manera que la salida viene es un mapa clave con la moneda y el valor debe ser otro mapa vehículo con Acc primaria y el valor con la lista de sub cuentas.

Map<String, Map<String,List<String>>> normalizedData = //logic

Yo estaba pensando en hacer de esta manera de la vieja escuela, básicamente,

  1. Clasificar los datos en función de la moneda.
  2. Iterar la lista y poner los datos en el mapa (ya está ordenada los datos y hasta que consigo las llaves duplicadas empezar a poner los datos correspondientes (cuenta principal en un nuevo mapa)
  3. Repita el proceso anterior, básicamente a nivel primario de la cuenta y empezar a poner la llave duplicada datos de valor correspondiente (subcuentas en un objeto de lista)

En cuanto a mi proceso de pensamiento que tengo que crear 2 copias de la lista (1 ordenar a las divisas para la primera iteración), 2ª clase en la cuenta principal para el mapa anidada. Parece poco ineficiente, entonces me miró a los arroyos, pero no podía visualizar cómo puedo usarlos pero cualquier orientación o pensamiento sería apreciado.

shmosel:

Es bastante sencillo con las corrientes. Se necesita un par de grupos anidados y un mapeo al final. En aras de la brevedad, asumiremos que tiene una importación estática de java.util.stream.Collectors.*.

Map<String, Map<String, List<String>>> normalizedData = users.stream().collect(
        groupingBy(UserData::getCurrency,
                groupingBy(UserData::getPrimaryAccountNumber,
                        mapping(UserData::getSubAccountNumber, toList()))));

Tenga en cuenta que groupingBy()no permite llaves nulas , por lo que puede de hecho tener que utilizar una llave falsa.

Supongo que te gusta

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