开发者社区> 问答> 正文

它如何删除重复的对象并从带有流的对象字段中减去值?

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

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

有可能用流做到这一点吗?

问题来源:Stack Overflow

展开
收起
montos 2020-03-21 22:22:33 858 0
1 条回答
写回答
取消 提交回答
  • 您可以将Collectors.toMap与mergeFunction一起使用,并在merge函数中定义逻辑来减去

    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();
    

    回答来源:Stack Overflow

    2020-03-21 22:23:47
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载