我正在做一些Scala体操,Seq[T]在那里我尝试找到"最小"的元素.这就是我现在所做的:
val leastOrNone = seq.reduceOption { (best, current) =>
if (current.something < best.something) current
else best
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我不太满意 - 对于这么简单的事情来说有点长,而且我并不关心"如果".使用minBy会更优雅:
val least = seq.minBy(_.something)
Run Code Online (Sandbox Code Playgroud)
......但min与minBy抛出异常时序列为空.是否有一种惯用的,更优雅的方式来查找可能为空的列表中的最小元素Option?
在Scala中,对于许多(所有?)类型的集合,您可以创建视图.
究竟是什么视图以及视图有用的目的是什么?
在Iterables上完成Scala 练习时,我遇到了以下奇怪的行为:
val xs = Set(5,4,3,2,1)
val ys = Set(1,2,3,4,5)
xs sameElements ys // true
val xs = Set(3,2,1)
val ys = Set(1,2,3)
xs sameElements ys // false - WAT?!
Run Code Online (Sandbox Code Playgroud)
当然这些集合具有相同的元素,应该忽略排序; 为什么这只能用于更大的集合?
在Scala中有一个Stream类,它非常像迭代器.主题Scala中Iterator和Stream之间的区别?提供了两者之间相同点和不同点的一些见解.
看看如何使用流非常简单,但我没有很多常见的用例,我会使用流而不是其他工件.
我现在的想法:
所以我错过了任何重大用途吗?或者它是大多数开发人员的偏好?
谢谢
关于Scala,我有些不明白的地方collection.mutable.Seq.它描述了所有可变序列的接口,但是我没有看到在不创建新序列的情况下附加或前置元素的方法.我错过了一些明显的东西吗?
有:+和+:分别追加和前插,但他们创造新的集合-为了与不变序列的行为是一致的,我想.这是好的,但为什么会出现不一样的方法+=和+=:,如ArrayBuffer和ListBuffer定义,用于就地追加和预先准备?这是否意味着我不能引用一个可变的seq,它被键入,collection.mutable.Seq就像我想要就地添加一样?
再一次,我一定错过了一些明显的东西,却找不到什么......
给定:
val m = Map[String, Int]("a" -> 1, "b" -> 2, "c" -> 3)
m.foreach((key: String, value: Int) => println(">>> key=" + key + ", value=" + value))
Run Code Online (Sandbox Code Playgroud)
为什么编译器会抱怨
error: type mismatch
found : (String, Int) => Unit
required: (String, Int) => ?
Run Code Online (Sandbox Code Playgroud) class DefaultListMap[A, B <: List[B]] extends HashMap[A, B] {
override def default(key: A) = List[B]()
}
Run Code Online (Sandbox Code Playgroud)
我不想创建地图A -> List[B].在我的情况下,Long -> List[String]但是当我从地图获得没有值的键时,我想创建空List而不是Exception被抛出.我尝试了不同的组合,但我不知道如何使代码通过编译器.
提前致谢.
Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")
Run Code Online (Sandbox Code Playgroud)
如果隐私为0,如何从此地图中删除数据.
Map(rel -> 2, privacy -> 0, status -> 1,name->"govind singh")
Run Code Online (Sandbox Code Playgroud) collections dictionary scala playframework scala-collections
有val hm: HashMap[org.joda.time.DateTime, MyType]我想获得第一和最后DateTime借助一组hm.keys.min,并hm.keys.max分别但是编译器说No implicit Ordering defined for org.joda.time.DateTime.如何定义这个排序(隐式和显式选项都很有趣)?
我有一个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
scala ×10
collections ×1
dictionary ×1
java ×1
mutable ×1
sequence ×1
sorting ×1
stream ×1
views ×1