标签: scala-java-interop

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

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

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

scala scala-java-interop scala-collections

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

Scala中==和.equals之间的区别是什么?

==.equals()Scala有什么区别,什么时候使用哪个?

实现是否与Java相同?

编辑:相关问题谈论的具体情况AnyVal.更一般的情况是Any.

scala equality scala-java-interop

137
推荐指数
5
解决办法
5万
查看次数

在Scala中迭代Java集合

我正在编写一些使用Apache POI API的Scala代码.我想迭代java.util.Iterator我从Sheet类中获得的行.我想在for each样式循环中使用迭代器,所以我一直在尝试将其转换为原生的Scala集合,但没有运气.

我查看了Scala包装器类/特性,但我看不出如何正确使用它们.如何在不使用详细while(hasNext()) getNext()循环样式的情况下迭代Scala中的Java集合?

这是我根据正确答案编写的代码:

class IteratorWrapper[A](iter:java.util.Iterator[A])
{
    def foreach(f: A => Unit): Unit = {
        while(iter.hasNext){
          f(iter.next)
        }
    }
}

object SpreadsheetParser extends Application
{
    implicit def iteratorToWrapper[T](iter:java.util.Iterator[T]):IteratorWrapper[T] = new IteratorWrapper[T](iter)

    override def main(args:Array[String]):Unit =
    {
        val ios = new FileInputStream("assets/data.xls")
        val workbook = new HSSFWorkbook(ios)
        var sheet = workbook.getSheetAt(0)
        var rows = sheet.rowIterator()

        for (val row <- rows){
            println(row)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java collections scala scala-java-interop

111
推荐指数
7
解决办法
8万
查看次数

106
推荐指数
6
解决办法
7万
查看次数

如何将java.util.List转换为Scala列表

我有这个Scala方法,错误如下.无法转换为Scala列表.

 def findAllQuestion():List[Question]={
   questionDao.getAllQuestions()
 } 
Run Code Online (Sandbox Code Playgroud)

类型不匹配; 发现:java.util.List[com.aitrich.learnware.model.domain.entity.Question]必填: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]

scala list scala-java-interop

102
推荐指数
5
解决办法
6万
查看次数

在Java中使用Scala traits和已实现的方法

我想不可能从Java调用Scala特征中实现的方法,或者有办法吗?

假设我在Scala中:

trait Trait {
  def bar = {}
}
Run Code Online (Sandbox Code Playgroud)

如果我使用它,在Java中

class Foo implements Trait {
}
Run Code Online (Sandbox Code Playgroud)

Java抱怨说 Trait is not abstract and does not override abstract method bar() in Trait

java scala scala-java-interop

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

54
推荐指数
3
解决办法
2万
查看次数

使用Java中的Scala:将函数作为参数传递

请考虑以下Scala代码:

package scala_java
object MyScala {
  def setFunc(func: Int => String) {
    func(10)
  }
}
Run Code Online (Sandbox Code Playgroud)

现在在Java中,我希望MyScala用作:

package scala_java;
public class MyJava {
    public static void main(String [] args) {
        MyScala.setFunc(myFunc);  // This line gives an error
    }
    public static String myFunc(int someInt) {
        return String.valueOf(someInt);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,上述方法不起作用(正如预期的那样,因为Java不允许函数式编程).在Java中传递函数最简单的解决方法是什么?我想要一个通用的解决方案,适用于具有任意数量参数的函数.

编辑:Java 8的语法是否比下面讨论的经典解决方案更好?

java scala scala-java-interop

44
推荐指数
3
解决办法
2万
查看次数

将Java Map转换为Scala Map

我有一个java地图:java.util.Map<SomeObject, java.util.Collection<OtherObject>> 我想将它转换为scala地图:Map[SomeObject, Set[OtherObject]]

我使用了mapAsScalaMap,但结果并不是我想要的,结果是:Map[SomeObject, java.util.Collection[OtherObject]].如何修复它以将集合转换为集合?

注意:实际上我的原始问题是将谷歌转换ArrayListMultimap<SomeObject, OtherObject>为a,MultiMap[SomeObject, OtherObject]但由于这是不可能的,我已经解决了问题.如果您有原始问题的解决方案,我也会接受它作为答案.

java scala type-conversion scala-java-interop scala-collections

41
推荐指数
2
解决办法
3万
查看次数

将Java转换为Scala持续时间

是否有一种优雅的方式转换java.time.Durationscala.concurrent.duration.FiniteDuration

我试图在Scala中进行以下简单的Config使用:

val d = ConfigFactory.load().getDuration("application.someTimeout")

但是我没有看到在Scala中使用结果的任何简单方法.当然希望Typesafe的好人不要指望我这样做:

FiniteDuration(d.getNano, TimeUnit.NANOSECONDS)

编辑:注意该行有一个错误,这证明了这一点.请参阅下面的选定答案.

scala duration config scala-java-interop

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