标签: scala-collections

最小/最大,选项[T]可能为空Seq?

我正在做一些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)

......但minminBy抛出异常时序列为空.是否有一种惯用的,更优雅的方式来查找可能为空的列表中的最小元素Option

scala scala-collections

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

什么是集合的视图以及您何时想要使用它们?

在Scala中,对于许多(所有?)类型的集合,您可以创建视图.

究竟是什么视图以及视图有用的目的是什么?

scala views scala-collections

53
推荐指数
3
解决办法
6694
查看次数

Scala集包含相同的元素,但sameElements()返回false

在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 scala-collections

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

Scala中Streams的用例

在Scala中有一个Stream类,它非常像迭代器.主题Scala中Iterator和Stream之间的区别?提供了两者之间相同点和不同点的一些见解.

看看如何使用流非常简单,但我没有很多常见的用例,我会使用流而不是其他工件.

我现在的想法:

  • 如果你需要使用无限系列.但这对我来说似乎不是一个常见的用例,因此它不符合我的标准.(请纠正我,如果这是常见的,我只是有一个盲点)
  • 如果您有一系列数据需要计算每个元素,但您可能需要多次重复使用.这很弱,因为我可以将它加载到一个列表中,这对于大部分开发人员来说在概念上更容易理解.
  • 也许存在大量数据或计算量很大的系列,并且您需要的项目很可能不需要访问所有元素.但是,在这种情况下,除非你需要做一些搜索,在这种情况下,你可以使用一个清单,以及即使是稍微低效率的迭代器将是一个很好的匹配.
  • 有一系列复杂的数据需要重复使用.这里可以再次使用列表.虽然在这种情况下两种情况都同样难以使用,并且Stream更适合,因为并非所有元素都需要加载.但又不是那么常见......或者是这样吗?

所以我错过了任何重大用途吗?或者它是大多数开发人员的偏好?

谢谢

scala stream scala-collections

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

如何附加或前置Scala mutable.Seq

关于Scala,我有些不明白的地方collection.mutable.Seq.它描述了所有可变序列的接口,但是我没有看到在不创建新序列的情况下附加或前置元素的方法.我错过了一些明显的东西吗?

:++:分别追加和前插,但他们创造新的集合-为了与不变序列的行为是一致的,我想.这是好的,但为什么会出现不一样的方法+=+=:,如ArrayBufferListBuffer定义,用于就地追加和预先准备?这是否意味着我不能引用一个可变的seq,它被键入,collection.mutable.Seq就像我想要就地添加一样?

再一次,我一定错过了一些明显的东西,却找不到什么......

scala mutable sequence scala-collections

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

斯卡拉地图foreach

给定:

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)

scala scala-collections

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

如何在Scala中使用默认操作实现Map

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被抛出.我尝试了不同的组合,但我不知道如何使代码通过编译器.

提前致谢.

scala scala-collections

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

如何从scala中的map中删除键值

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

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

如何在Scala中定义订购?

val hm: HashMap[org.joda.time.DateTime, MyType]我想获得第一和最后DateTime借助一组hm.keys.min,并hm.keys.max分别但是编译器说No implicit Ordering defined for org.joda.time.DateTime.如何定义这个排序(隐式和显式选项都很有趣)?

sorting scala scala-collections

41
推荐指数
2
解决办法
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万
查看次数