示例:
Comperator
变量a的类型为DROP TABLE IF EXISTS t;
CREATE TABLE t(id INT);
INSERT INTO t VALUES(1),(2),(3),(4),(6),(7),(8);
SELECT a.id start
, MIN(c.id) end
FROM t a
LEFT
JOIN t b
ON b.id = a.id - 1
LEFT
JOIN t c
ON c.id >= a.id
LEFT
JOIN t d
ON d.id = c.id + 1
WHERE b.id IS NULL
AND c.id IS NOT NULL
AND d.id IS NULL
GROUP
BY a.id;
+-------+------+
| start | end |
+-------+------+
| 1 | 4 |
| 6 | 8 |
+-------+------+
。
我想获得var a = Map(1 -> List(7,8,9), 2 -> 15)
的第一个元素。
scala.collection.immutable.Map[Int,Any]
给了我一个错误:List(7, 8, 9)
。
如何将a(1)(0)
转换为Any does not take parameters
?
请帮忙。
答案 0 :(得分:3)
类似于@EndeNeu,但仍然涵盖了空列表的情况,为了很好地定义问题我们假设值为0
,
a.collect {
case (i, Nil) => (i, 0)
case (i, x::_) => (i, x)
case p @ (_, _) => p
}
注意@
将元组绑定到p
,以便在部分映射中我们不需要复制整个元组。
答案 1 :(得分:2)
使用collect应该有效:
scala> var a = Map(1 -> List(7,8,9), 2 -> 15)
a: scala.collection.immutable.Map[Int,Any] = Map(1 -> List(7, 8, 9), 2 -> 15)
scala>
| a collect {
| case (i: Int, l: List[_]) if l.nonEmpty => (i, l.head)
| case (i: Int, j: Int) => (i, j)
| }
res1: scala.collection.immutable.Map[Int,Any] = Map(1 -> 7, 2 -> 15)
但是我警告你不要收到一个Any
的收藏品,你丢失了所有类型的安全性而且收集无法获取你想要的东西,因为匹配并不详尽,我会审查我的方法如果我是你,可能会根据你的应用逻辑使用两个集合。