如何在 Scala 中移植 java 内部函数?
how to port java inner function in Scala?
如何从 here 移植 java 内部函数
哪个完全包含在 Scala 中?
JavaPairRDD<Envelope, HashSet<Point>> castedResult = joinListResultAfterAggregation.mapValues(new Function<HashSet<Geometry>,HashSet<Point>>()
{
@Override
public HashSet<Point> call(HashSet<Geometry> spatialObjects) throws Exception {
HashSet<Point> castedSpatialObjects = new HashSet<Point>();
Iterator spatialObjectIterator = spatialObjects.iterator();
while(spatialObjectIterator.hasNext())
{
castedSpatialObjects.add((Point)spatialObjectIterator.next());
}
return castedSpatialObjects;
}
});
return castedResult;
由于某些 NotinferredU
,我下面概述的方法无法编译
val castedResult = joinListResultAfterAggregation.mapValues(new Function[java.util.HashSet[Geometry], java.util.HashSet[Point]]() {
def call(spatialObjects: java.util.HashSet[Geometry]): java.util.HashSet[Point] = {
val castedSpatialObjects = new java.util.HashSet[Point]
val spatialObjectIterator = spatialObjects.iterator
while (spatialObjectIterator.hasNext) castedSpatialObjects.add(spatialObjectIterator.next.asInstanceOf[Point])
castedSpatialObjects
}
})
这个怎么样?
val castedResult = joinListResultAfterAggregation.mapValues(spatialObjects => {
spatialObjects.map(obj => (Point) obj)
})
当询问有关编译错误的问题时,请提供确切的错误,尤其是当您的代码不能独立存在时。
内部函数本身没问题;我的猜测是,由于上述变化 joinListResultAfterAggregation
不再是 JavaPairRDD
,而是正常的 RDD[(Envelope, Something)]
(其中 Something
可能是 java.util.HashSet
,scala.collection.Set
或某些子类型),因此它的 mapValues
采用 Scala 函数,而不是 org.apache.spark.api.java.function.Function
。 Scala 函数被写成 lambdas:spatialObjects: Something => ...
(主体将取决于 Something
实际是什么,并且在某些情况下可以省略参数类型)。
如何从 here 移植 java 内部函数 哪个完全包含在 Scala 中?
JavaPairRDD<Envelope, HashSet<Point>> castedResult = joinListResultAfterAggregation.mapValues(new Function<HashSet<Geometry>,HashSet<Point>>()
{
@Override
public HashSet<Point> call(HashSet<Geometry> spatialObjects) throws Exception {
HashSet<Point> castedSpatialObjects = new HashSet<Point>();
Iterator spatialObjectIterator = spatialObjects.iterator();
while(spatialObjectIterator.hasNext())
{
castedSpatialObjects.add((Point)spatialObjectIterator.next());
}
return castedSpatialObjects;
}
});
return castedResult;
由于某些 NotinferredU
val castedResult = joinListResultAfterAggregation.mapValues(new Function[java.util.HashSet[Geometry], java.util.HashSet[Point]]() {
def call(spatialObjects: java.util.HashSet[Geometry]): java.util.HashSet[Point] = {
val castedSpatialObjects = new java.util.HashSet[Point]
val spatialObjectIterator = spatialObjects.iterator
while (spatialObjectIterator.hasNext) castedSpatialObjects.add(spatialObjectIterator.next.asInstanceOf[Point])
castedSpatialObjects
}
})
这个怎么样?
val castedResult = joinListResultAfterAggregation.mapValues(spatialObjects => {
spatialObjects.map(obj => (Point) obj)
})
当询问有关编译错误的问题时,请提供确切的错误,尤其是当您的代码不能独立存在时。
内部函数本身没问题;我的猜测是,由于上述变化 joinListResultAfterAggregation
不再是 JavaPairRDD
,而是正常的 RDD[(Envelope, Something)]
(其中 Something
可能是 java.util.HashSet
,scala.collection.Set
或某些子类型),因此它的 mapValues
采用 Scala 函数,而不是 org.apache.spark.api.java.function.Function
。 Scala 函数被写成 lambdas:spatialObjects: Something => ...
(主体将取决于 Something
实际是什么,并且在某些情况下可以省略参数类型)。