在scala.collection,有两个非常相似的对象JavaConversions和JavaConverters.
==和.equals()Scala有什么区别,什么时候使用哪个?
实现是否与Java相同?
编辑:相关问题谈论的具体情况AnyVal.更一般的情况是Any.
我正在编写一些使用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) 如何将Scala转换scala.List为Java java.util.List?
我有这个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]
我想不可能从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.lang.Iterable[_]
Run Code Online (Sandbox Code Playgroud)
到了
Scala.Iterable[_]
Run Code Online (Sandbox Code Playgroud)
?
请考虑以下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地图: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
是否有一种优雅的方式转换java.time.Duration为scala.concurrent.duration.FiniteDuration?
我试图在Scala中进行以下简单的Config使用:
val d = ConfigFactory.load().getDuration("application.someTimeout")
但是我没有看到在Scala中使用结果的任何简单方法.当然希望Typesafe的好人不要指望我这样做:
FiniteDuration(d.getNano, TimeUnit.NANOSECONDS)
编辑:注意该行有一个错误,这证明了这一点.请参阅下面的选定答案.