2015-01-18 2 views
0

Итак, есть определенный класс, который я переопределяю в определенной структуре (не имеет значения, но это среда SecureSocial для Play). Метод я переопределение имеет подпись:Попытка конвертировать HashMap в scala ListMap

В Scala:

override val providers : scala.collection.immutable.ListMap[scala.Predef.String, securesocial.core.IdentityProvider] = { /* compiled code */ } 

Итак, я просто написал как:

@Override 
ListMap<String, IdentityProvider> providers() { ... } 

Проблема заключается в том, что единственное, что я могу сделать с ListMap от Java:

new ListMap<>(); 

Это не очень полезно. Map, который я хочу переопределить, вводится через DI, а у меня есть java.util.HashMap. Итак, мой метод выглядит так:

@Override 
ListMap<String, IdentityProvider> providers() { 
    Map<String, IdentityProvider> providerMap = this.providerMap; 
    toScalaListMap(providerMap); 
} 

Конечно, toScalaListMap не существует. Как мне его написать? Я пробовал искать в Интернете и смотреть на документацию scala, но, учитывая мои ночные знания Scala, я не знаю с чего начать. Я добавляю тег securesocial в этом вопросе на всякий случай.

ответ

0

То, как я получил вокруг этого использовать что-то вроде этого:

return (ListMap<String, IdentityProvider>)new ListMap<String, IdentityProvider>() 
      .newBuilder() 
      .$plus$eq(new Tuple2<>("provider1", provider1)) 
      .$plus$eq(new Tuple2<>("provider2", provider2)) 
      .result(); 

Где Tuple2 существу scala.Tuple2. Это уродливо, но оно работает!

1

Существует метод asScala, доступный в сборниках Java, подробно описанный в документах scala here. Просто называя его в вашей коллекции, вы должны сделать конверсию для вас.

+0

Но я не думаю, что могу получить доступ к любому методу, называемому 'asScala', из файла .java. Компилятор не обнаружит этот метод. –

+0

А, ладно, извините. Я изменил ситуацию; Я думал, вы работаете в scala и пытаетесь импортировать коллекцию java. Виноват. –

Смежные вопросы