Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
groovy中的Java流收集器Set::size出错_Java_Groovy_Java 8_Java Stream_Collectors - Fatal编程技术网

groovy中的Java流收集器Set::size出错

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.

我试图从流组中按字段y选择最大计数不同的字段x;在使用Java流/收集器的groovy脚本中。基本上,我想要一个countdistinct的解决方案,然后我可以将它输入到.max

我一直在尝试这篇文章中的解决方案:

但是得到错误:

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()})));