Как преобразовать из от java.util. Отобразитесь на Карту Scala

Спасибо за ваш ответ @Joe и @pjnola, как вы все предложили, я сослался на документы flask-login

Я обнаружил, что мы можем настроить класс анонимного пользователя, поэтому я настроил для мое требование,

Anonymous class

#!/usr/bin/python
#flask-login anonymous user class
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
  def __init__(self):
    self.username = 'Guest'

Затем добавил этот класс в anonymous_user

login_manager.anonymous_user = Anonymous

Из этого он смог получить имя пользователя, если это был анонимный запрос.

14
задан Eugene Yokota 15 December 2010 в 20:13
поделиться

3 ответа

Scala String - это java.lang.String , но Scala Boolean не является java.lang.Boolean . Следовательно, работает следующее:

import collection.jcl.Conversions._
import collection.mutable.{Map => MMap}
import java.util.Collections._
import java.util.{Map => JMap}

val jm: JMap[String, java.lang.Boolean] = singletonMap("HELLO", java.lang.Boolean.TRUE)

val sm: MMap[String, java.lang.Boolean] = jm //COMPILES FINE

Но ваша проблема по-прежнему связана с разницей Boolean . Вам придется «свернуть» карту Java в карту scala: попробуйте еще раз, используя тип Scala Boolean :

val sm: MMap[String, Boolean] = collection.mutable.Map.empty + ("WORLD" -> false)
val mm = (sm /: jm) { (s, t2) => s + (t2._1 -> t2._2.booleanValue) }

Тогда mm - это карта scala, содержащая содержимое исходная карта Scala плюс то, что было на карте Java

6
ответ дан 1 December 2019 в 13:09
поделиться

Я думаю, что у меня есть частичный ответ ...

Если вы конвертируете карту java в карту scala с типами java. Затем вы можете отобразить его на карту scala типов scala:

val javaMap = new java.util.TreeMap[java.lang.String, java.lang.Boolean]
val temp = new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
    override def underlying = javaMap
}
val scalaMap = temp.map{
    case (k, v) => (k.asInstanceOf[String] -> v.asInstanceOf[Boolean])
}

Недостаток этого плана в том, что тип scalaMap является Iterable [(java.lang.String, Boolean)], а не картой. Я так близок, может ли кто-нибудь более умный, чем я, исправить последнее утверждение, чтобы это сработало?!

0
ответ дан 1 December 2019 в 13:09
поделиться

useJavaMap.scala

import test._
import java.lang.Boolean
import java.util.{Map => JavaMap}
import collection.jcl.MapWrapper

object useJavaMap {
  def main(args: Array[String]) {
    var scalaMap : Map[String, Boolean] = Map.empty
    scalaMap = toMap(test.testing())
    println(scalaMap)
  }

  def toMap[K, E](m: JavaMap[K, E]): Map[K, E] = {
    Map.empty ++ new MapWrapper[K, E]() {
      def underlying = m
    }
  }
}

test / test.java

package test;

import java.util.*;

public class test {
    public static Map<String, Boolean> testing() {
        Map<String, Boolean> x = new HashMap<String, Boolean>();
        x.put("Test",Boolean.FALSE);
        return x;
    }
    private test() {}
}

Командная строка

javac test\test.java
scalac useJavaMap.scala
scala useJavaMap
> Map(Test -> false)
2
ответ дан 1 December 2019 в 13:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: