gpt4 book ai didi

Java Stream.collect 使用 groupingBy

转载 作者:行者123 更新时间:2023-11-30 10:22:02 24 4
gpt4 key购买 nike

我有一小段代码,我想通过流中类型的 2 个属性的组合对结果进行分组。在适当的过滤之后,我创建了一个映射,在其中创建了一个包含这 2 个属性的简单类型的实例(在本例中称为 AirportDay)。现在我想将它们组合在一起并按计数降序排列。我遇到的问题是为 groupingBy 方法提出正确的参数。到目前为止,这是我的代码:

final int year = getYear();
final int limit = getLimit(10, 1, 100);

repository.getFlightStream(year)
.filter(f -> f.notCancelled())
.map(f -> new AirportDay(f.getOriginAirport(), f.getDate()))
.collect(groupingBy( ????? , counting())) // stuck here
.entrySet()
.stream()
.sorted(comparingByValue(reverseOrder()))
.limit(limit)
.forEach(entry -> {
AirportDay key = entry.getKey();
printf("%-30s\t%s\t%,10d\n",
key.getAirport().getName(),
key.getDate(),
entry.getValue()
);
});

我的第一直觉是通过 AirportDay::this 但这显然行不通...

如果您能提供任何帮助以解决上述问题,我将不胜感激。

-托尼

最佳答案

如果您想按AirportDay 分组,请提供创建groupingBy 键的函数:

repository.getFlightStream(year)
.filter(f -> f.notCancelled())
.collect(groupingBy(f -> new AirportDay(f.getOriginAirport(), f.getDate()), counting()))

注意:AirportDay 类必须实现合理的 equals()hashCode() 方法才能正常工作。

关于Java Stream.collect 使用 groupingBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com