首页 > 解决方案 > 它如何删除重复的对象并从带有流的对象字段中减去值?

问题描述

根据具有这些示例值的产品列表

new Product("A", new Stock(5));
new Product("B", new Stock(1));
new Product("A", new Stock(1));

我想过滤重复对象列表以及是否存在重复对象。我从列表中减去它的值。

//list after filter
Product A = 4 stock
        B = 1 stock

可以用流做到这一点吗?

标签: javacollectionsjava-8java-stream

解决方案


您可以将Collectors.toMap与 mergeFunction 一起使用,并且在合并函数中您可以定义要减去的逻辑

    Collection<Product> result = products.stream()
            .collect(Collectors.toMap(Product::getName, Function.identity(), (p1, p2) -> {
                int count = p1.getStock().getValue() - p2.getStock().getValue();
                p1.getStock().setValue(count > 0 ? count : 0);
                return p1;
            })).values();

推荐阅读