为了账号安全,请及时绑定邮箱和手机立即绑定

将 java lambda 谓词移植到 scala

将 java lambda 谓词移植到 scala

侃侃无极 2023-06-04 19:45:55
我如何移植Iterables.filter(tree                // do the first search using the bounds                .search(bounds),                // refine using the exact distance                entry -> {                    Point p = entry.geometry();                    Position position = Position.create(p.y(), p.x());                    return from.getDistanceToKm(position) < distanceKm;                });从 Java 到 Scala?我的以下方法失败了:import com.github.davidmoten.grumpy.core.Positionimport com.github.davidmoten.rtree2.{Iterables, RTree}import com.github.davidmoten.rtree2.geometry.{Geometries, Point}val sydney = Geometries.point(151.2094, -33.86)val canberra = Geometries.point(149.1244, -35.3075)val brisbane = Geometries.point(153.0278, -27.4679)val bungendore = Geometries.point(149.4500, -35.2500)var tree = RTree.star.create[String, Point]tree = tree.add("Sydney", sydney)tree = tree.add("Brisbane", brisbane)val distanceKm = 300val list = Iterables.toList(search(tree, canberra, distanceKm))def createBounds(from: Position, distanceKm: Double) = { // this calculates a pretty accurate bounding box. Depending on the  // performance you require you wouldn't have to be this accurate because  // accuracy is enforced later  val north = from.predict(distanceKm, 0)  val south = from.predict(distanceKm, 180)  val east = from.predict(distanceKm, 90)  val west = from.predict(distanceKm, 270)  Geometries.rectangle(west.getLon, south.getLat, east.getLon, north.getLat)}因为类型entry似乎没有明确定义。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

tree类型RTree[String, Point]为T=String, S=Point. 所以tree.search(bounds)有 type Iterable[Entry[String, Point]]。所以entry有 type Entry[String, Point]。


尝试


(entry: Entry[String,Point]) => {

  def foo(entry: Entry[String,Point]) = {

    val p = entry.geometry

    val position = Position.create(p.y, p.x)

    from.getDistanceToKm(position) < distanceKm

  }


  foo(entry)

})

在 Scala 2.13.0、rtree2 0.9-RC1、grumpy-core 0.2.4 中测试。


在 2.11 中,这应该只是


import scala.compat.java8.FunctionConverters._


((entry: Entry[String,Point]) => {

  def foo(entry: Entry[String,Point]) = {

    val p = entry.geometry

    val position = Position.create(p.y, p.x)

    from.getDistanceToKm(position) < distanceKm

  }


  foo(entry)

}).asJava

libraryDependencies += "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.0"


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号