我在 Scala 中使用 Optaplanner,我这样调用“groupBy”方法:
factory
.forEach(classOf[ClassA])
.filter(classA => classA.classB != null)
.groupBy((classA: ClassA) => classA.classB)
....
这行得通。但是,如果我尝试像这样添加 count() 约束收集器:
factory
.forEach(classOf[ClassA])
.filter(classA => classA.classB != null)
.groupBy((classA: ClassA) => classA.classB, count())
....
它抱怨“无法解析重载方法'groupBy'”。
我试过显式传递通用类型:
factory
.forEach(classOf[ClassA])
.filter(classA => classA.classB != null)
.groupBy((classA: ClassA) => classA.classB, count[ClassB]())
....
count()约束收集器参数有类型
UniConstraintCollector[ClassB, _, Integer]
而 groupBy 方法有签名:
<GroupKey_, ResultContainer_, Result_> BiConstraintStream<GroupKey_, Result_> groupBy(
Function<A, GroupKey_> groupKeyMapping,
UniConstraintCollector<A, ResultContainer_, Result_> collector)
但这并没有改变结果。
知道这里出了什么问题吗?
根据签名,
groupBy
的两个函数参数应该从同一个A
映射,但您试图将它应用于从ClassA
映射的第一个函数和从ClassB
映射的第二个函数。
编译如下:
.groupBy((classA: ClassA) => classA.classB, count[ClassA]())