【问题标题】:Java lambda expression-Count the number of appearances [duplicate]Java lambda表达式-计算出现次数[重复]
【发布时间】:2018-01-20 11:55:34
【问题描述】:

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

class Ticket{
    String destination;
}

ArrayList<Ticket> tickets;

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

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

【问题讨论】:

    标签: java lambda java-8 java-stream


    【解决方案1】:

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

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

    在这种情况下,我专门使用了summingInt 收集器,因为counting() 收集器返回Long 类型,并且由于您希望映射值为Integer,然后@987654325 @collector 是最合适的。

    【讨论】:

    • 要获取Map&lt;String,Integer&gt; 类型,这是一个不错的解决方案。
    • @Aominè 你应该解释为什么不Collectors.couting
    【解决方案2】:

    使用groupingBycollector

    tickets.stream().collect(Collectors.groupingBy(Ticket::getDestination,
            Collectors.counting()));
    

    这会给你一个Map&lt;String, Long&gt;

    如果您想要一个带有Integer 值的地图,您可以将counting 替换为仅返回1summingInt(这是this answer 所做的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      • 2015-12-09
      • 2021-07-16
      相关资源
      最近更新 更多