【问题标题】:adding the items integer values in java在java中添加项目整数值
【发布时间】:2020-04-22 15:34:46
【问题描述】:

我有关于以下模式的数据,我只想添加类似项目的数量并存储在列表中。而像 quantity= 1, ingredient=chicken, unit =kg 这样的项目, 单位将始终为 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公斤牛肉

【问题讨论】:

    标签: java arrays java-8


    【解决方案1】:

    你可以使用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();
    

    【讨论】:

    • 您的答案中的list 是什么? @Hadi J
    • 我的意思是itemsDTOList
    • 我的chicken有可能是2倍以上。那么,它也适用于这种情况吗?
    • 是的,有可能。 toMap收集器具有合并功能合并所有具有相同ingredient的对象
    • @Lily,我认为这个解决方案绝对完美。你也应该自己尝试一些东西。 itemsDTOS.stream().collect(Collectors.toMap(ItemsDTO::getIngredient, Function.identity(), sumQuantity)) .values() .stream() .map(itemsDTO -&gt; itemsDTO.getQuantity() + " " + itemsDTO.getUnit() + " " + itemsDTO.getIngredient()) .collect(Collectors.toList()); 但上面的评论是完美的。您将在 itemDTO 类中调用 itemDTO.toString 并覆盖 toString,这将返回 quantity + " " + unit + " " + ingredient;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多