小编fle*_*end的帖子

在元组列表上使用map()时的详细表示法

我喜欢让我的代码非常天真可读.

如果我设置一个简单的元组列表:

scala> val a = List(6, 8, 10)
a: List[Int] = List(6, 8, 10)

scala> val b = a zipWithIndex
b: List[(Int, Int)] = List((6,0), (8,1), (10,2))
Run Code Online (Sandbox Code Playgroud)

我想在List上映射(),但我发现._1 ._2语法有点难以阅读:

scala> val c = b map ( a => if(a._1 > 8) a._1 else a._2 )           
c: List[Int] = List(0, 1, 10)
Run Code Online (Sandbox Code Playgroud)

为了"命名"元组,我用过:

scala> val c = b map ( { case (num, i) => if(num > 8) num else i } )
c: List[Int] = List(0, 1, 10)
Run Code Online (Sandbox Code Playgroud)

两个问题: …

scala list

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

将包含Boolean的Scala映射转换为包含java.lang.Boolean的Java映射

我想将带有布尔值的scala映射转换为带有java.lang.Boolean值的java映射(用于互操作性).

import scala.collection.JavaConversions._

val a = Map[Int, Boolean]( (1, true), (2, false) )
val b : java.util.Map[Int, java.lang.Boolean] = a
Run Code Online (Sandbox Code Playgroud)

失败了:

error: type mismatch;
found   : scala.collection.immutable.Map[Int,scala.Boolean]
required: java.util.Map[Int,java.lang.Boolean]
val b : java.util.Map[Int, java.lang.Boolean] = a
Run Code Online (Sandbox Code Playgroud)

JavaConversions隐式转换很适合在相同类型上参数化的容器,但不知道Boolean和java.lang.Boolean之间的转换.

我可以使用JavaConversions魔术来执行此转换,还是有一个简洁的语法来执行转换而不使用该包中的隐式转换?

java interop scala

12
推荐指数
2
解决办法
5141
查看次数

Map容器​​中函数的紧凑表示法?

我正在为对象中的简单数据访问器构建枚举条目的映射.以下是使用Int作为关键字的示例(来自解释器):

class Obj(a: Int, b: Int) {
    def getA = a
    def getB = b
}

val m : Map[Int, (Obj) => Int] = Map(
    (2, (o: Obj) => o.getA)
);

val d = m(2)(new Obj(3,4))
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是必须在每个映射值的参数中明确地使用:Obj类型编写函数似乎是不必要的:

(o: Obj) => o.getA
Run Code Online (Sandbox Code Playgroud)

是否有更严格的语法我错过了?

collections scala function

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

标签 统计

scala ×3

collections ×1

function ×1

interop ×1

java ×1

list ×1