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

Java 它如何删除重复的对象并使用流从对象字段中减去值?,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,根据具有这些示例值的产品列表 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 是否可以使用stream执行此操作?可以与merge函数一起使用,并且可以在me

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

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
是否可以使用stream执行此操作?

可以与merge函数一起使用,并且可以在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();
Collection result=products.stream()
.collect(Collectors.toMap(Product::getName,Function.identity(),(p1,p2)->{
int count=p1.getStock().getValue()-p2.getStock().getValue();
p1.getStock().setValue(计数>0?计数:0);
返回p1;
})).values();

如果您的库存数量大于5,该怎么办?你会做
5-1-9
还是什么?你能展示
股票类吗?如果计数变为负数会发生什么?如果减法是负数。可能会回来zero@FelipeMarcelo如何确定减法是负数还是负数?股票本身有哪些负值
(1-5-(-9))
?此外,你的尝试在哪里?这将有助于澄清这个问题。投票结束,因为这需要更多的关注。非常感谢我的朋友deadpool。。。在另一种情况下,如果每次重复一个对象时,都将股票减去1,那么它将是,int count=p1.getStock()。getValue()-1?注意这种方法,因为它修改了原始产品的库存,这是正确的@FedericoPeraltaSchaffner,如果他需要,他还可以创建新的对象,因为减法是不关联的,这将根据处理的元素顺序产生不同的结果(例如
5-1=>4
1-5=>0
). (我建议@FelipeMarcelo以一种强制性的方式分享他们已经尝试过或已经过的实际实现。)