добавление целых значений элементов в java - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть данные о следующем шаблоне, и я просто хочу добавить количество похожих элементов и сохранить в списке. Принимая во внимание, что такие элементы, как quantity= 1, ingredient=chicken, unit =kg, единица будет всегда кг . У меня есть List<itemsDTO> Я хочу добавить похожие предметы из этого списка. [{1,"kg","chicken"} , {2.2,"kg","beaf"} , {0.25,"kg","chicken"}]

public class itemsDTO {

    double quantity;
    String unit;
    String ingredient;

}

Я пробовал этот код

        List<itemsDTO> itemsDTOList = new ArrayList<>();
            for (int i = 0; i < itemsDTOList.size(); i++) {
            for (int j = 0; j < itemsDTOList.size(); j++) {

                if (itemsDTOList.get(i).getIngredient().equalsIgnoreCase(itemsDTOList.get(j).getIngredient())) {
                    int sum;
                    sum = itemsDTOList.get(i).getQuantity() + itemsDTOList.get(j).getQuantity();
                }
            }

        }



Ожидаемый выход 1,25 кг курицы, 2,2 кг говядины

1 Ответ

4 голосов
/ 22 апреля 2020

Вы можете использовать toMap коллектор с функцией слияния:

BinaryOperator<itemsDTO> sumQuantity = (a, b) -> {
        a.setQuantity(a.getQuantity() + b.getQuantity());
        return a;
    };
itemsDTOList.stream()
    .collect(Collectors.toMap(itemsDTO::getIngredient, Function.identity(), sumQuantity))
    .values();
...