Java lambda表达式统计出现的次数

Java lambda表达式统计出现的次数,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,因此,我有以下类和对象的ArrayList: class Ticket{ String destination; } ArrayList<Ticket> tickets; 舱单{ 字符串目的地; } ArrayList门票; 我想要的是从我的列表中得到一个字符串和整数的映射,其中包含来自tickets的目的地以及我列表中每个目的地的发生次数。我想会是这样开始的,但我不知道如何继续: Map<String,Integer> map=tickets.stream

因此,我有以下类和对象的ArrayList:

class Ticket{
    String destination;
}

ArrayList<Ticket> tickets;
舱单{
字符串目的地;
}
ArrayList门票;
我想要的是从我的列表中得到一个字符串和整数的映射,其中包含来自tickets的目的地以及我列表中每个目的地的发生次数。我想会是这样开始的,但我不知道如何继续:

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

您可以使用收集器和收集器的组合,如下所示:

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

在本例中,我特别使用了收集器,因为收集器返回的是
Long
类型,并且由于您希望映射值为
Integer
,因此收集器是最合适的。您可以使用收集器和收集器的组合,如下所示:

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

在本例中,我特别使用了收集器,因为收集器返回一个
Long
类型,并且由于您希望映射值为
Integer
,那么收集器是最合适的。

使用
分组方式

这将为您提供一张
地图


如果您想要一个带有
整数
值的映射,您可以将
计数
替换为一个
求和
,它只返回
1
(这就是它的作用)

使用
分组依据

这将为您提供一张
地图


如果你想要一个带有
Integer
值的映射,你可以用一个
summingit
替换
counting
,它只返回
1
(这就是它的作用)

来获得
map
类型,这是一个很好的解决方案。@Aominè,这是一个很好的解决方案。@Aominè你应该解释为什么不
collector.couting