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

标签 java groovy java-8 java-stream collectors

我正在尝试使用 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/

相关文章:

java - 使用 Jersey : MessageBodyWriter not found for multipart/form-data 发送多个文件

grails - 如何从groovy中的字符串中提取带有数字的给定字符串数组

java - 在 RCP 应用程序中使用 Groovy-Eclipse 插件中的 Groovy 编辑器

java-8 - Mockito when().thenReturn 没有给出预期结果

java - 纪元年和周年的区别?

java - POST 后将应用程序重定向到其他服务器

java - 为什么Object已经初始化了,其值还是null?

java - Java 中的功能等价

groovy - 如何验证一个对象是否具有某种属性?

java-8 - 对象列表的反序列化不适用于 Rest Assured Jsonpath 和 jdk8