No problema abaixo preciso juntar os itens que tem o mesmo "documento", Do jeito que fiz funciona perfeitamente, mas gostaria de utilizar os recursos do Java8 como Stream, Map, Collectors...Como voces resolveriam?
Detalhes: na List<ItemProdutoResumoFaturamento> vem desta forma
{documento=10;numeroNF=11;emissooNF=10-10-2017;cliente=Ali SA;ReferePro=1;DeescriPro=Arroz}
{documento=10;numeroNF=11;emissooNF=10-10-2017;cliente=Ali SA;ReferePro=2;DeescriPro=Feijão}
{documento=10;numeroNF=11;emissooNF=10-10-2017;cliente=Ali SA;ReferePro=3;DeescriPro=Batata}
{documento=15;numeroNF=12;emissooNF=20-11-2017;cliente=Souza SA;ReferePro=4;DeescriPro=Tempero}
{documento=15;numeroNF=12;emissooNF=20-11-2017;cliente=Souza SA;ReferePro=1;DeescriPro=Arroz}
{documento=22;numeroNF=13;emissooNF=10-12-2017;cliente=Silva SA;ReferePro=3;DeescriPro=Batata}
Resultado esperado:
InfoResumoNFEmitidas {
documento=10,numeroNF=11,emissooNF=10-10-2017,cliente=Ali SA,Produtos{ReferePro=1,DeescriPro=Arroz;ReferePro=2,DescriPro=Feijão;ReferePro=3,DeescriPro=Batata};
documento=15,numeroNF=12,emissooNF=20-11-2017,cliente=Souza SA,Produtos{ReferePro=4,DeescriPro=Tempero;ReferePro=1,DescriPro=Arroz};
documento=22,numeroNF=13,emissooNF=10-12-2017,cliente=Silva SA,Produtos{ReferePro=3,DeescriPro=Batata}}
Metodo:
private List<InfoResumoNFEmitidas> getResumoProdutos(List<ItemProdutoResumoFaturamento> listOF) {
Map<String, InfoResumoNFEmitidas> notas = new HashMap<>();
for (ItemProdutoResumoFaturamento iprf : listOF) {
InfoResumoNFEmitidas dadosNota = null;
InfoResumoNFProdutos dadosProduto = null;
if(notas.containsKey(iprf.getDocumento())){
dadosNota = notas.get(iprf.getDocumento());
}else{
dadosNota = new InfoResumoNFEmitidas(
iprf.getNumeroNF(),
iprf.getEmissaoNF(),
iprf.getCliente());
notas.put(iprf.getDocumento(), dadosNota);
}
dadosProduto = new InfoResumoNFProdutos(
iprf.getReferePro(),
iprf.getDescriPro());
dadosNota.getProdutoNF().add(dadosProduto);
}
return new ArrayList<InfoResumoNFEmitidas>(notas.values());
}