Java lambda表达式 - 计算出现次数

时间:2018-01-20 11:55:34

标签: java lambda java-8 java-stream

所以我有以下类和对象的ArrayList:

class Ticket{
    String destination;
}

ArrayList<Ticket> tickets;

我想要的是从我的列表中获取一个字符串和整数的映射,其中包含票证中的目的地以及每个目的地列表中出现的次数。我想它会像这样开始,但我不知道如何继续:

Map<String,Integer> map=tickets.stream().filter(a->a.getDestination()).

2 个答案:

答案 0 :(得分:2)

您可以像这样使用groupingBy收藏家和summingInt收藏家的组合:

Map<String,Integer> map = 
  tickets.stream()
         .collect(Collectors.groupingBy(Ticket::getDestination, 
                   Collectors.summingInt(e -> 1)));

在这种情况下,我特意使用了summingInt收集器,因为counting()收集器返回Long类型,因为您希望地图值为{ {1}}然后summingInt收藏家是最合适的。

答案 1 :(得分:2)

使用COPY ./node_new_modules/* node_modules/ collector

groupingBy

这会给你一个tickets.stream().collect(Collectors.groupingBy(Ticket::getDestination, Collectors.counting()));

如果您想要一张包含Map<String, Long>值的地图,您可以将Integer替换为只返回counting的{​​{1}}(这是this answer所做的)