来自Groovy的Java8流分组
我正在尝试使用来自Groovy的Java8流分组,groovy,java-stream,Groovy,Java Stream,我正在尝试使用@CompileStatic将Java 8流API与groovy结合使用: 编写groupingBy让我头疼,错误是: java.util.stream.Collector中的groupingBy不能应用于groovy.lang.Close 目前正在使用Java8和Groovy2.4.7 我的意图是: 使用map构建dto 使用collect和groupingBy创建一个使用UUID作为键的映射 这是最终工作代码(使用“Will Lp”和“BalRog”支持开发) import g
@CompileStatic
将Java 8流API与groovy结合使用:
编写groupingBy
让我头疼,错误是:
java.util.stream.Collector中的groupingBy不能应用于groovy.lang.Close
目前正在使用Java8和Groovy2.4.7
我的意图是:
collect
和groupingBy
创建一个使用UUID作为键的映射import groovy.transform.CompileStatic
导入groovy.transform.Immutable
导入java.util.function.function
导入静态java.util.stream.Collectors.groupingBy;
@编译的
公共课感谢您的关注{
@不变的
公共静态阶级关系{
字符串entityUUID
}
公共静态void main(字符串[]args){
列表行=[
[entityUUID:“uuid 1”],
[实体uuid:“uuid 2”]
]
映射关系=行。流()
.map{row->new关系(作为HashMap的行)}
.collect(groupingBy((函数){Relation r->return r.entityUUID}))
println(关系);
断言关系==[
“uuid 1”:[新关系(entityUUID:“uuid 1”)],
“uuid 2”:[新关系(entityUUID:“uuid 2”)]
]
}
}
您需要显式地将闭包强制转换为函数
,这是收集器.groupBy()所期望的参数类型。更改此行:
.collect(groupingBy { Relation r -> return r.entityUUID })
为此:
.collect(groupingBy((Function) { Relation r -> return r.entityUUID }))
(记住导入java.util、 function.function
)您可以发布您的groupingBy
代码吗?是Java 8 API Java.util.stream.Collectors.groupingBy中的静态groupingBy函数,我使用您的代码编写了一个,但无法重现您的错误。你能告诉我哪里弄错了吗?还有,你的groovy和java版本是什么?非常感谢Will Lp,你的例子现在更清楚了。我已经把你的工作,并编辑它,使之符合我的代码和复制错误。目前正在使用Java8和Groovy2.4.7。令人惊讶的是,去掉@CompileStatic可以让事情顺利进行,但这不是一个选项。我猜可能是泛型的问题,它需要一些铸件来制作魔术。Thx BalRog,这是最后一点需要使它工作!
.collect(groupingBy((Function) { Relation r -> return r.entityUUID }))