groovy中的Java流收集器Set::size出错
我试图从流组中按字段y选择最大计数不同的字段x;在使用Java流/收集器的groovy脚本中。基本上,我想要一个countdistinct的解决方案,然后我可以将它输入到.max 我一直在尝试这篇文章中的解决方案: 但是得到错误:groovy中的Java流收集器Set::size出错,java,groovy,java-8,java-stream,collectors,Java,Groovy,Java 8,Java Stream,Collectors,我试图从流组中按字段y选择最大计数不同的字段x;在使用Java流/收集器的groovy脚本中。基本上,我想要一个countdistinct的解决方案,然后我可以将它输入到.max 我一直在尝试这篇文章中的解决方案: 但是得到错误: unexpected token: : @ line 65, column 114. ")}, Collectors.toSet()), Set::size).val Groovy似乎在Set::size和Map::size方面存在问题 我已经导入了java.
unexpected token: : @ line 65, column 114.
")}, Collectors.toSet()), Set::size).val
Groovy似乎在Set::size和Map::size方面存在问题
我已经导入了java.util.Map和java.util.Set,但都无效。这是Groovy语法/导入Java类的问题还是我如何使用收集器的问题?作为参考,我只是尝试从原始post解决方案在此地图上实现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()})));
或者使用带和的闭包稍微短一点
编辑
甚至更短的学分:
不幸的是,groovy不接受java方法引用语法,但是您可以使用闭包并像这样重写它
Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
{bid -> bid.bidderUserId},
collectingAndThen(
mapping({bid -> bid.auctionId}, toSet()),
{set -> set.size()})));
或者使用带和的闭包稍微短一点
编辑
甚至更短的学分:
我用java尝试了您的代码的近似值,它工作正常。看起来您使用的收集器是正确的。我用java尝试了您的代码的近似值,它工作正常。看起来您使用的收集器是正确的。更简短的:{bid->bid.auctionId}或{It.&getBidderUserId}就是{It.actionId}@cfrick ah,您是对的!谢谢我将编辑我的答案,甚至更短:{bid->bid.auctionId}或{it.&getBidderUserId}就是{it.actionId}@cfrick啊,你说得对!谢谢我将编辑我的答案
Map<Integer, Integer> map = bids.stream().collect(
groupingBy(
{it.bidderUserId},
collectingAndThen(
mapping({it.auctionId}, toSet()),
{it.size()})));