Java lambda表达式统计出现的次数
因此,我有以下类和对象的ArrayList: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
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