gpt4 book ai didi

Java 流收集器在 Set::size 上出现 groovy 错误

转载 作者:行者123 更新时间:2023-11-29 07:33:21 24 4
gpt4 key购买 nike

我正在尝试使用 Java 流/收集器在常规脚本中执行 SELECT MAX(COUNT DISTINCT field_x) FROM stream GROUP BY field_y;。基本上,我想要一个针对 COUNT DISTINCT 的解决方案,然后我可以将其输入到 .max 中。

我一直在尝试这篇文章中的解决方案:java 8 - stream, map and count distinct

但是出现错误:

unexpected token: : @ line 65, column 114.
")}, Collectors.toSet()), Set::size).val

Groovy 似乎在 Set::sizeMap::size 方面有问题。

我导入了 java.util.Mapjava.util.Set 但没有用。这是 Groovy 语法/导入 Java 类的问题还是我使用 Collectors 的方式的问题?作为引用,我只是尝试在原始帖子解决方案的这张 map 上实现 forEach println:

Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
Bid::getBidderUserId,
collectingAndThen(
mapping(Bid::getAuctionId, toSet()),
Set::size)));

如果这作为评论更合适,我深表歉意,但显然,发表评论比提出问题需要更多的声誉。

最佳答案

不幸的是,groovy 不接受 java 方法引用语法,但是您可以使用闭包并像这样重写它

Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
{bid -> bid.bidderUserId},
collectingAndThen(
mapping({bid -> bid.auctionId}, toSet()),
{set -> set.size()})));

或者(短一点)使用闭包 implicit parametermethod pointer operator

Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
{it.&getBidderUserId()},
collectingAndThen(
mapping({it.&getAuctionId()}, toSet()),
{it.&size()})));

编辑

或更短(归功于 @cfrick ):

Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
{it.bidderUserId},
collectingAndThen(
mapping({it.auctionId}, toSet()),
{it.size()})));

关于Java 流收集器在 Set::size 上出现 groovy 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277655/

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