I sort a list in a certain order, then create a Map to total this list by grouping by a key.
What happens is that sometimes the values are ignored generating difference in total. And I can not see where this might be occurring see the code:
// Classifica
listaLancamentos.sort(new OrdenaVolumeProdutoPorNome().thenComparing(new OrdenaVolumeProdutoVariedadePorNome()).thenComparing(new OrdenaVolumeProdutoPorUf())
.thenComparing(new OrdenaVolumeProdutoPorMunicipio()));
// Totaliza volumes
Map<String, DtoVolumeProduto> map = new HashMap<String, DtoVolumeProduto>();
for (DtoVolumeProduto dvl : listaLancamentos) {
String key = dvl.getNmProduto()+" "+dvl.getNmProdutoVariedade()+" "+dvl.getSgUf()+" "+dvl.getNmMunicipio();
if (!map.containsKey(key)) {
map.put(dvl.getNmProduto()+" "+dvl.getNmProdutoVariedade()+" "+dvl.getSgUf()+" "+dvl.getNmMunicipio(), dvl);
// logger.info(key+" - "+dvl.getVolumeKg()+" "+dvl.getPrecoMedioKg()+"
// "+dvl.getVrTotal());
} else {
DtoVolumeProduto dto = map.get(key);
// logger.info(key+" "+dvl.getVolumeKg());
BigDecimal volumeKg = dto.getVolumeKg().setScale(3, RoundingMode.HALF_UP).add(dvl.getVolumeKg().setScale(3, RoundingMode.HALF_UP));
dto.setVolumeKg(volumeKg);
}
}