按数量从列表中提取对象

时间:2018-01-13 18:45:16

标签: java list arraylist

我有ArrayList<Drink> drinks Drink课程由2个项目nameamount组成。

如果我在Drink中填充了ArrayList<Drink类的许多实例,例如:

“可乐”,“30”

“fanta”,“10”

“可乐”,“5”

“精灵”,“1”

“可乐”,“10”

我现在想要只有一个列表,它将这些元素和输出结合起来:

“可乐”,“45”

“fanta”,“10”

“精灵”,“1”

我怎样才能做到这一点。此外,我不知道列表中包含哪些饮料,可能还有其他一些。只是想按金额和不重复来组合它们? 感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是java-8或更高版本,那么

List<Drink> list = new ArrayList<>();
list.add(new Drink("coke", 30));
list.add(new Drink("fanta", 10));
list.add(new Drink("coke", 5));
list.add(new Drink("sprite", 1));
list.add(new Drink("coke", 10));
Map<String, Integer> map = list.stream()
    .collect(Collectors.groupingBy(Drink::getName, 
                 Collectors.summingInt(Drink::getAmount)));
System.out.println(map);

<强>输出
{sprite = 1,coke = 45,fanta = 10}

Collection<Drink> c = 
       list.stream().collect(Collectors.groupingBy(Drink::getName,
            Collectors.collectingAndThen(
                Collectors.reducing((Drink a, Drink b) -> {
                   a.setAmount(a.getAmount() + b.getAmount());
                   return a;
            }), Optional::get))).values();