This question already has answers here:
Group by counting in Java 8 stream API
(6个答案)
2年前关闭。
所以我有以下类和ArrayList对象:
我想要的是从列表中获取一个字符串和整数映射,其中包含故障单的目的地以及列表中每个目的地的出现次数。我认为它会像这样开始,但是我不知道如何继续:
在这种情况下,由于summingInt收集器返回
(6个答案)
2年前关闭。
所以我有以下类和ArrayList对象:
class Ticket{
String destination;
}
ArrayList<Ticket> tickets;
我想要的是从列表中获取一个字符串和整数映射,其中包含故障单的目的地以及列表中每个目的地的出现次数。我认为它会像这样开始,但是我不知道如何继续:
Map<String,Integer> map=tickets.stream().filter(a->a.getDestination()).
最佳答案
您可以像这样使用groupingBy收集器和summingInt收集器的组合:
Map<String,Integer> map =
tickets.stream()
.collect(Collectors.groupingBy(Ticket::getDestination,
Collectors.summingInt(e -> 1)));
在这种情况下,由于summingInt收集器返回
Long
类型,并且由于您希望将映射值设为Integer
,所以我专门使用了counting()收集器,因此最合适的。