Optimizar el recorrido de la lista con la corriente

Arjutrrchc:

Tengo una List<BatchDTO>con la clase siguiente

public class BatchDTO {

    private String batchNumber;
    private Double quantity;
.
.
//Getters and setters
}

Lo que tengo que hacer es resumir el total si el NÚMERO DE LOTE es duplicado. He utilizado un LinkedHashMap para implementar esto, y lo hicieron las iteraciones. Pero lo que me gustaría tener es una forma más optimizada. ¿Puedo utilizar la corriente para hacer esto de forma optimizada.

private static List<BatchDTO > getBatchDTO (Map<String, BatchDTO > batchmap) {
    return batchmap.values().stream().collect(Collectors.toList());
}

private static Map<String, BatchDTO > getBatchMap(List<BatchDTO > batchList, Map<String, BatchDTO > batchMap) {
        for (BatchDTO  batchDTO  : batchList) {
            batchMap = getBatchMap(batchMap, batchDTO );
        }
    return batchMap;
}

private static Map<String, BatchDTO > getBatchMap(Map<String, BatchDTO > batchMap, BatchDTO  batchObject) {
    String batchCode = batchObject.getBatchNumber();
        if(!batchMap.containsKey(batchCode)) {
            batchMap.put(batchCode, batchObject);
        } else {
            batchObject.setQuantity(getTotalQuantity(batchMap,batchObject));
            batchMap.put(batchCode, batchObject);
        }
    return batchMap;
}

private static Double getTotalQuantity(Map<String, BatchDTO > batchmap, BatchDTO  batchObject) {
    return batchmap.get(batchObject.getBatchNumber()).getQuantity() + batchObject.getQuantity();
}
Ruslan:

Usted podría tratar de usar corriente api el camino @Naman sugerido en los comentarios. Y suponiendo que BatchDTOtiene todos los argumentos de constructor que podría volver a partir MapdeList<BatchDTO>

List<BatchDTO> collect = list.stream()
        .collect(groupingBy(BatchDTO::getBatchNumber, summingDouble(BatchDTO::getQuantity)))
        .entrySet().stream()
        .map(entry -> new BatchDTO(entry.getKey(), entry.getValue()))
        .collect(Collectors.toList());

JavaDoc: groupingBy () , summingDouble ()

Supongo que te gusta

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