相关疑难解决方法(0)

Scala中的JavaConverters和JavaConversions之间有什么区别?

scala.collection,有两个非常相似的对象JavaConversionsJavaConverters.

  • 这两个对象有什么区别?
  • 为什么它们都存在?
  • 我什么时候想要使用其中一个?

scala scala-java-interop scala-collections

195
推荐指数
4
解决办法
4万
查看次数

如何从Java列表中获取Scala列表?

我有一个返回List的Java API,如:

public List<?> getByXPath(String xpathExpr)
Run Code Online (Sandbox Code Playgroud)

我使用下面的scala代码:

val lst = node.getByXPath(xpath)
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试scala语法糖,如:

lst.foreach{ node => ... }
Run Code Online (Sandbox Code Playgroud)

这是行不通的.我收到错误:

value foreach is not a member of java.util.List[?0]
Run Code Online (Sandbox Code Playgroud)

看来我需要将Java List转换为Scala List.如何在上述背景下做到这一点?

java scala

129
推荐指数
6
解决办法
8万
查看次数

将Java List转换为Scala Seq

我需要在Java中实现一个返回"Seq"的方法但是我遇到错误,我不知道如何解决它.

java.util.ArrayList cannot be cast to scala.collection.Seq
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的代码

@Override
public Seq<String> columnNames() {
    List<String> a = new ArrayList<String>();
    a.add("john");
    a.add("mary");
    Seq<String> b = (scala.collection.Seq<String>) a;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

Seq似乎没有提供转换为的可能性scala.collection.JavaConverters.谢谢

java scala seq scala-java-interop

23
推荐指数
6
解决办法
4万
查看次数

Scala相当于新的HashSet(Collection)

什么是Java 的等效Scala构造函数(用于创建不可变的 HashSet)

new HashSet<T>(c)
Run Code Online (Sandbox Code Playgroud)

这里c是类型的Collection<? extends T>

我在HashSet 物体中找到的只是apply.

java scala scala-collections

9
推荐指数
2
解决办法
1万
查看次数

如何从Java集合创建Scala并行集合

将Java Collection转换为Scala等效项的最简单方法是使用JavaConversions,因为Scala 2.8..这些隐式defs返回包含的Java Collection的包装器.

Scala 2.9引入了并行集合,可以并行执行集合上的操作,稍后收集结果.这很容易实现,将现有集合转换为并行集合非常简单:

myCollection.par
Run Code Online (Sandbox Code Playgroud)

但是使用JavaConversions从Java集合转换的集合上使用'par'会有问题.如并行收集转换中所述,通过评估所有值并将它们添加到新的并行集合,本质上将顺序集合"强制"为新的并行集合:

其他集合(例如列表,队列或流)本质上是顺序的,因为必须一个接一个地访问元素.通过将元素复制到类似的并行集合中,可以将这些集合转换为其并行变体.例如,功能列表被转换为标准的不可变并行序列,其是并行向量.

当原始Java集合要进行延迟评估时,这会导致问题.例如,如果仅返回Java Iterable,稍后将其转换为Scala Iterable,则无法保证Iterable的内容是否会被急切访问.那么如何从Java集合中创建并行集合而不必承担评估每个元素的成本呢?我试图通过使用并行集合并行执行它来避免这种成本,并希望"获取"提供的前n个结果.

根据Parallel Collection Conversions,有一系列的收集类型需要花费不变的时间,但似乎没有办法确保JavaConversions可以创建这些类型(例如,'Set'可以创建,但是那个'HashSet'?).

java collections scala parallel-collections

5
推荐指数
1
解决办法
255
查看次数