Os dados de lista estruturação usando Java 8 e normalizando-lo em uma estrutura do mapa

user1697113:

Então, eu ainda sou novo para Java 8 e ainda lutando para correlacionar a API com iteração e coleções tradicional córregos.

Então, eu tenho uma lista de objeto "UserData" que tem 3 propriedades, a lista é todos os dados desnormalizada.

 public class UserData {

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

Entrada de dados de exemplo seria 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

O resultado esperado deve ser algo como

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

Então, eu quero que ele seja normalizada de uma forma tal que a saída vem é um mapa chaveado com moeda eo valor deve ser outra Mapa chaveado com Prec primária e valor com lista de sub Contas.

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

Eu estava pensando em fazer desta forma oldschool, basicamente,

  1. Organizar os dados com base em moeda corrente.
  2. Iterate da lista e colocar os dados no mapa (desde os dados são classificados e até eu pegar as chaves duplicadas vai começar a colocar os dados correspondentes (conta principal num novo Mapa)
  3. Repetir o processo acima basicamente ao nível conta principal e começar a colocar a chave duplicada de dados de valor correspondente (sub contas em um objeto da lista)

Quanto ao meu processo de pensamento que eu tenho que criar 2 Lista de cópias (1 classificar a moeda para a primeira iteração), 2 nd tipo de conta principal por mapa aninhada. Parece pouco ineficiente, então eu olhei para os fluxos, mas não podia visualizar como eu posso usá-los, mas qualquer orientação ou pensamentos seria apreciada.

shmosel:

É bastante simples com fluxos. Você precisa de um par de agrupamentos aninhados e um mapeamento no final. Por uma questão de brevidade, eu vou assumir que tem uma importação estática java.util.stream.Collectors.*.

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

Note-se que groupingBy()não permite chaves nulas , assim você pode realmente ter de usar uma chave de manequim.

Acho que você gosta

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