This question already has answers here:
Group by counting in Java 8 stream API
                                
                                    (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()收集器,因此最合适的。

07-26 03:03
查看更多