小编Max*_*Max的帖子

如何在Scala中将Map [Symbol,List [A]]转换为List [Map [Symbol,A]]?

我需要转换一个

Map[Symbol, List[A]] to a List[Map[Symbol,A]] 
Run Code Online (Sandbox Code Playgroud)

但我找不到一个紧凑的代码片段(我想有一个非常紧凑的方法来实现这一点).

具体来说,我有一个

Map('a -> List("aa", "bb", "cc"),
    'b -> List("dd", "ee", "ff"),
    'c -> List("gg", "hh", "ii"))
Run Code Online (Sandbox Code Playgroud)

我想得到一个

List(Map('a -> "aa", 'b -> "dd", 'c -> "gg"),
    (Map('a -> "bb", 'b -> "ee", 'c -> "hh"),
    (Map('a -> "cc", 'b -> "ff", 'c -> "ii"))  
Run Code Online (Sandbox Code Playgroud)

请注意,第一个集合中的所有列表都具有相同的大小.

有帮助吗?

collections scala scala-collections

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

为Scala播放2.2:是否可以修改传入请求的会话?

我正在尝试使用动作合成将假用户添加到Session.

def GuestAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    var myUser = searchUser(request.session)
    if ( myUser == null ) {
       myUser = newUser()
    }
    f(request).withSession("user" -> myUser)
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中有

def action1 = GuestAction { implicit request =>
   // My code
   Ok()
}

def action2 = GuestAction { implicit request =>
   val user = request.session.get("user").get
   // My code
   Ok()
}
Run Code Online (Sandbox Code Playgroud)

当我打开Chrome浏览器并浏览到指向"action1"的路线然后浏览到指向"action2"的路线时,一切正常:我有一个新用户并且它已附加到会话中.相反,当我打开Chrome并首先浏览到指向"action2"的路径时,我收到错误,因为我的"request.session"为空,这很明显:使用.withSession()会话附加到Result,而不是来电请求.因此,为了使这项工作,我需要将会话密钥/值对附加到传入请求 - 就像它可能的那样FakeRequest.withSession(),但是没有这样的方法Request.

你有什么建议来解决这个问题?

scala playframework playframework-2.2

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

Scala集合:在按域分组的许多列表中随地吐出列表或URL

我想弄清楚什么是最方便的方法(意思是最简洁的)来分割按域分组的URLs(List[String])列表,List[List[String]]其中每个内部列表包含URL来自同一域的s,例如.www.somewhere.net

你将如何面对这项任务?

collections scala

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

在Oracle数据库中调用AT TIME ZONE函数时,时区区域无效

关于Oracle中"AT TIME ZONE"功能的一个简单问题.似乎名为CEST的时区不是此函数的有效参数,尽管它在视图中列出了V $ TIMEZONE_NAMES

select * from V$TIMEZONE_NAMES where tzname like '%Rome%';

TZNAME      TZABBREV CON_ID
----------- -------- ------
Europe/Rome LMT      0
Europe/Rome RMT      0
Europe/Rome CET      0
Europe/Rome CEST     0

SQL>
Run Code Online (Sandbox Code Playgroud)

当我尝试将时间戳转换为时区名称CET时,一切都按预期工作

SELECT TO_TIMESTAMP('2012-MAG-24 02:00:00','RRRR-MON-DD HH24:MI:SS') 
    AT TIME ZONE 'CET' "CET" 
FROM DUAL;

CET
--------------------------------
24-MAG-12 02:00:00,000000000 CET

SQL>
Run Code Online (Sandbox Code Playgroud)

当我将时区更改为CEST时,我收到此错误:

SELECT TO_TIMESTAMP('2012-MAG-24 02:00:00','RRRR-MON-DD HH24:MI:SS') 
    AT TIME ZONE 'CEST' "CEST" 
  FROM DUAL;

ORA-01882: timezone region not found

SQL>
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么CEST时区对此转换无效?

为了清楚起见,我正在运行Oracle 12c实例

oracle timezone

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