我有ArrayList<Drink> drinks
Drink
课程由2个项目name
和amount
组成。
如果我在Drink
中填充了ArrayList<Drink
类的许多实例,例如:
“可乐”,“30”
“可乐”,“5”
“精灵”,“1”
“可乐”,“10”
我现在想要只有一个列表,它将这些元素和输出结合起来:
“可乐”,“45”
“精灵”,“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();