Tag: scala

什么是Java 8“视图”?

我在看保罗飞利浦的演讲: 在12:48时,他在比较Scala和Java时说“在Java 8中他们的观点确实有效” 什么是Java“视图”以及Scala的等价物是什么? 更新:感谢Daniel的回答,我发现这篇文章很有帮助: http : //www.scala-lang.org/docu/files/collections-api/collections_42.html

Scala类实现两个Java接口 – 如何实现?

我刚开始学习Scala,现在我想知道如何用一个Scala类实现两个不同的Java接口? 假设我有以下用Java编写的接口 public interface EventRecorder { public void abstract record(Event event); } public interface TransactionCapable { public void abstract commit(); } 但是Scala类一次只能扩展一个类。 我怎样才能拥有可以同时履行这两个合同的Scala类? 我是否必须将这些界面映射到特征中? 注意,我的Scala类将用于Java,因为我试图将用Scala编写的新function注入到现有的Java应用程序中。 现有框架期望两个接口合同都得到满足。

执行io时akka jvm线程vs os线程

我已经搜索了一些网站,以帮助理解这一点,但没有发现任何超级明确的东西,所以我想我会发布我的用例,看看是否有人可以解决一些问题。 我有一个关于在akka中用于io操作时jvm线程vs os线程的扩展的问题。 来自akka网站: Akka支持事件驱动的轻量级线程的调度程序,允许在单个工作站上创建数百万个线程,以及基于线程的Actors,其中每个调度程序都绑定到专用的OS线程。 基于事件的Actors目前每个Actor消耗约600个字节,这意味着您可以在4 G RAM上创建超过650万个Actors。 在这种情况下,您是否可以帮助我了解在只有1个处理器的工作站上的重要性(为简单起见)。 因此,对于我的示例用例,我想要列出1000个“用户”,然后查询数据库(或多个)以获取有关每个用户的各种信息。 因此,如果我要将每个“获取”任务分配给一个actor,并且该actor将要执行IO,那么该actor是否会基于工作站的os线程限制阻塞? 在这样的场景中,akka演员模型如何让我解脱? 我知道我可能遗漏了一些东西,因为我对vm线程与os线程的交互作用并不是很了解,所以如果这里有一个聪明的人可以为我拼出来,那就太好了。 如果我使用Futures,我是否需要使用await()或get()来阻止并等待回复? 在我的使用案例中,无论演员如何,它最终只是’感觉’就像我正在制作1000个顺序数据库请求一样? 如果代码片段有助于我理解这一点,那么Java将是首选,因为我仍然需要加快scala语法的速度 – 但这是一个很好的明确文本解释,说明这些数百万个线程在执行数据库IO时如何在单个处理器机器上进行互操作也没关系。

如何在Gradle中支持多种语言(Java和Scala)的多个项目?

我正在尝试将过时的Ant构建转换为Gradle。 该项目包含大约Java 50子项目和10个Scala子项目。 Java项目仅包含Java,Scala项目仅包含Scala。 每个项目都是由Java和Scala构建的,这大大减慢了我们的构建速度。 我想在root build.gradle文件中放置尽可能多的通用逻辑,如下所示: subprojects { apply plugin: ‘java’ apply plugin: ‘scala’ sourceCompatibility=1.7 targetCompatibility=1.7 sourceSets { main { scala { srcDir ‘src’ } java { srcDir ‘src’ } } test { scala { srcDir ‘test’ } java { srcDir ‘test’ } } } repositories { mavenCentral() } dependencies { scalaTools “org.scala-lang:scala-compiler:2.9.3” compile […]

Akka设计校长

在使用相当大的Akka应用程序时,我在使用普通方法和非Akka类时遇到了一个非常简单的结构,但在使用Akka时实际上很难确定,这就是为什么我来这里问你推荐什么是解决这个问题的最佳方法。 所以问题是这个,我有一个父actor,让我们称他为“Connector”,Connector有行为描述它在收到ConnectCommand实例时应该做什么。 首先,它使用HttpClient提交表单,然后转到几个URL以检查某些会话参数,并最终向Sender(称为“Consumer”)发送包含使用API​​所需的所有内容的连接消息。 现在,我是一个忠实的粉丝,而不是拉/问,所以实现这一点在我看来是一项艰巨的任务。 我们来看看吧。 HttpClientActor返回的所有响应都是一个Response实例,因此首先想到的是在我的actor中定义了多个行为,并且在连接过程的某个步骤完成后,逐步地将行为更改为下一步。 private final PartialFunction inital = ReceiveBuilder .match(ConnectCommand.class, c -> this.startConnection()) .matchAny(this::unhandled) .build(); private final PartialFunction stage1 = ReceiveBuilder .match(Response.class, this::stage1) .matchAny(this::unhandled) .build(); private final PartialFunction stage2 = ReceiveBuilder .match(Response.class, this::stage2) .matchAny(this::unhandled) .build(); private final PartialFunction stage3 = ReceiveBuilder .match(Response.class, this::stage3) .matchAny(this::unhandled) .build(); private final PartialFunction stage4 = ReceiveBuilder .match(Response.class, […]

为什么Spark在本地模式下失败并且“无法获得broadcast_0的broadcast_0_piece0”?

我正在运行这个片段来对点的RDD进行排序,对RDD进行排序并从给定点获取K-最近点: def getKNN(sparkContext:SparkContext, k:Int, point2:Array[Double], pointsRDD:RDD[Array[Double]]): RDD[Array[Double]] = { val tuplePointDistanceRDD:RDD[(Double, Array[Double])] = pointsRDD.map(point => (DistanceUtils.euclidianDistance(point, point2), point)) sparkContext.parallelize(tuplePointDistanceRDD.sortBy(_._1).map(_._2).take(k)) } 在我的应用程序中只使用一个SparkContext并将其作为参数传递给我的函数,我得到一个org.apache.spark.SparkException: Failed to get broadcast_0_piece0 of broadcast_0在我调用sparkContext.parallelize(tuplePointDistanceRDD.sortBy(_._1).map(_._2).take(k))时, org.apache.spark.SparkException: Failed to get broadcast_0_piece0 of broadcast_0错误的sparkContext.parallelize(tuplePointDistanceRDD.sortBy(_._1).map(_._2).take(k))从point2获得KNN点。 我正在构建sparkContext因为这个片段如下: var sparkContext = new SparkContext(“local”, “”) 面对这种错误的可能原因是什么? 基本上这是我的独立spark环境的LOG,其中包含此错误的堆栈跟踪: 15/12/24 11:55:29 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@localhost:55731] 15/12/24 11:55:29 […]

如何在Java中将java.util.Map转换为scala.collection.immutable.Map?

我发现很多人都试图这样做,并询问这个问题,但问题始终是用scala代码来回答的。 我需要调用一个期望scala.collection.immutable.Map的API,但我有一个java.util.Map,如何在我的java代码中从后者干净地转换为前者? 编译器不同意这种情绪,即它是一种隐式转换,因为当我尝试它时就会对它进行barfs! 谢谢!

scala范围与列表在大型集合上的性能

我为10,000,000个元素运行了一组性能基准测试,并且我发现每个实现的结果差别很大。 任何人都可以解释为什么创建Range.ByOne会导致性能优于简单的基元数组,但将相同范围转换为列表会导致性能甚至比最差情况更糟糕吗? 创建10,000,000个元素,并打印出模数为1,000,000的元素。 JVM大小始终设置为相同的最小值和最大值:-Xms?m -Xmx?m import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit._ object LightAndFastRange extends App { def chrono[A](f: => A, timeUnit: TimeUnit = MILLISECONDS): (A,Long) = { val start = System.nanoTime() val result: A = f val end = System.nanoTime() (result, timeUnit.convert(end-start, NANOSECONDS)) } def millions(): List[Int] = (0 to 10000000).filter(_ % 1000000 == 0).toList val results […]

比较器是类型类吗?

我一直在阅读Scala中的类型类,并认为我对它有很好的把握,直到我记得Java的java.util.Comparator 。 如果我理解正确, Ordering是类型类的原型示例。 我在Comparator和Ordering实例之间能够想到的唯一区别是比较器必然是显式的,而排序可以是,而且往往是隐含的。 Comparator是类型类吗? 我得到(错误的?)印象,Java实际上没有类型类。 这是否意味着类型类需要能够隐式? 我认为类型类的隐式转换主要是语法糖 – 实际上很棒,它“简单地”给编译器足够的提示 – 我错过了什么? 下面的代码示例显示了Comparator如何将排序操作添加到没有它的类型,而不必修改所述类型。 // Comparator used to retroactively fit the MyExample class with an ordering operation. public static class MyExampleComparator implements Comparator { public static final Comparator SINGLETON = new MyExampleComparator(); private MyExampleComparator() {} public int compare(MyExample a, MyExample b) { return a.value – […]

如何从java程序的main方法调用Scala程序的main方法?

假设我在Java项目中有一个Scala类和一个Java类,scala类如下所示 class Sam { def main(args: Array[String]): Unit = { println(“Hello”) } } 如何从同一项目中存在的java程序的main方法调用它的main方法