Как он удаляет повторяющиеся объекты и вычитает значения из поля объекта с потоком? - PullRequest
3 голосов
/ 17 марта 2020

в соответствии со списком продуктов с этими примерами значений

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

возможно ли это сделать с помощью потока?

1 Ответ

4 голосов
/ 17 марта 2020

Вы можете использовать Collectors.toMap с функцией слияния, а в функции слияния вы можете определить логические значения c для вычитания

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