Tag: scala collections

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

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

将Scala集成到Java中的现有项目中

我们有一个用Java编写的项目。 它是一个maven项目,有jsp页面和很多java代码: 用于处理用户请求和处理响应的servlet。 servlet用于处理所需逻辑的逻辑类。 用于连接数据库并执行逻辑所需的特定查询的SQL生成器类。 好吧,我们正在寻找Scala。 例如,我们使用映射器从数据库中获取实体集合,然后转换此集合,过滤它并返回到servlet。 这在Java中似乎是件好事。 问题是 – 我如何将其整合到现有项目中? 我可以在我用Java编写的逻辑文件中使用一些Scala类,这些类再次使用用Java编写的映射器文件吗?

使用JavaConversions在java和scala集合之间进行隐式转换

我使用通用函数合并了scala Set of scala Map def mergeMaps[A, B](ms: Set[Map[A, B]])(f: (B, B) => B): Map[A, B] = (Map[A, B]() /: (for (m <- ms; kv a + (if (a.contains(kv._1)) kv._1 -> f(a(kv._1), kv._2) else kv) } 这可以处理存在相同键冲突的情况。 但是,我想在Scala Code中使用Java集合来实现它。 我研究了一下,遇到了JavaConversions 。 我导入了它并写了这个 def mergeMaps[A, B](ms: Set[Map[A, B]])(f: (B, B) => B): Map[A, B] = (new […]

将Java TreeMap代码迁移到Scala?

我正在将我的Java代码库迁移到纯Scala,我仍然坚持使用这一段代码 。 我有一个IntervalMap的实现,即一个数据结构,让你有效地将范围[from,to]映射到set , delete和get操作都是O(log n) (与IntervalTree或SegmentTree略有不同)。 这段代码使用Java的java.util.TreeMaps ,在迁移到Scala时,我遇到了两个大问题: Scala没有mutable.TreeMap – 我决定通过使用mutable.TreeSet (奇怪的是Scala有mutable.TreeSet但没有mutable.TreeMap )来存储密钥并将值存储在辅助的mutable.Map 。 这是一个令人不快的黑客,但还有更好的方法吗? 下一个问题是Scala的mutable.TreeSet没有java.util.TreeSet的ceilingKey , floorEntry , pollFirst , pollLast等同于Java中的所有O(log n)操作。 那么,我怎样才能最好地将我的代码迁移到Scala? 这些情况下的最佳做法是什么? 我真的不想编写自己的树实现。 有没有更惯用的Scala编写IntervalMaps的方式,我不知道? 或者那里有一些有信誉的图书馆? 或者Scala只是简单地使用它的gimped TreeSet和不存在的TreeMaps来吮吸它。 当然,我可以在Scala中使用Java的TreeMap ,但这很难看,我失去了所有不错的Scala集合function,我不妨使用Java。 这是我目前的Java代码: https : //gist.github.com/pathikrit/5574521

将java.util.Map 转换为scala.collection.immutable.Map

如何将java.util.Map [String,Object]转换为scala.collection.immutable.Map [String,Any],以便将原始映射中的所有值(整数,布尔值等)转换为正确的值在Scala工作得很好。

如何将嵌套的scala集合转换为嵌套的Java集合

我在Scala和Java之间有编译问题。 我的Java代码需要一个 java.util.Map<Double, java.lang.Iterable> 我的scala代码有一个 Map[Double, Vector[Foo]] 我收到编译错误: error: type mismatch; found : scala.collection.immutable.Map[scala.Double,Vector[Foo] required: java.util.Map[java.lang.Double,java.lang.Iterable[Foo]] 似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以被隐式转换为Iterable。 没有迭代scala集合并手动进行转换,我可以做些什么来使类型工作?

我可以直接在Java中使用scala List吗?

我可以在Java中使用scala List,例如: import scala.collection.immutable.List; class HelloScalaList { public static void main (String[] args) { List xs = List(1, 2, 3); System.out.println(xs); } } 它似乎没有编译。 找不到List $ .apply方法。 当我改变它 List xs = Dir.ls() 其中Dir是我的scala类,而ls()返回一个scala List,编译器抱怨 “内部编译器错误:java.lang.ClassCastException:org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding无法强制转换为org.eclipse.jupt.internal中的org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding。 compiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding.java:927)” 我不知道这是什么意思。 我想在scala中编写一些库,但也希望它在Java中使用。 在我的scala类中有返回scala List的方法,对于java代码使用它们,我有两个选择: 直接在java中使用scala List 编写一个包装器类,为这些方法返回java.util.List。 我更喜欢选项1,因为否则我将不得不为几乎所有的scala类编写一个包装类。 但我只是无法在Java中运行scala List。

将java.util.HashMap转换为java中的scala.collection.immutable.Map

我正在使用Java代码中的一些Scala库。 我collections有问题。 我需要传递scala.collection.immutable.Map作为方法的参数。 我可以从我的Java代码转换或构建immutable.Map但我不知道该怎么做。 建议?