Jak przekonwertować Scala scala.List
na Java java.util.List
?
java
scala
scala-java-interop
Alex Baranosky
źródło
źródło
Odpowiedzi:
Scala List i Java List to dwie różne bestie, ponieważ pierwsza jest niezmienna, a druga jest zmienna. Tak więc, aby przejść od jednej do drugiej, musisz najpierw przekonwertować listę Scala na zmienną kolekcję.
W Scali 2.7:
Począwszy od Scala 2.8:
Jednak
asList
w tym przykładzie nie jest to konieczne, jeśli oczekiwany typ to JavaList
, ponieważ konwersja jest niejawna, jak pokazano w ostatnim wierszu.źródło
scala.collection.JavaConverters
od 2.12 dniaNie jestem pewien, dlaczego nie zostało to wcześniej wspomniane, ale myślę, że najbardziej intuicyjnym sposobem jest wywołanie
asJava
metody dekoratora JavaConverters bezpośrednio z listy Scala:źródło
Podsumowując poprzednie odpowiedzi
Zakładając, że mamy
List
:Jeśli chcesz wyrazić się jasno i powiedzieć dokładnie, co chcesz przekonwertować:
Jeśli nie chcesz współkontrolować konwersji i pozwolić kompilatorowi wykonać niejawną pracę za Ciebie:
To od Ciebie zależy, jak chcesz kontrolować swój kod.
źródło
Zaczynając
Scala 2.13
, pakietscala.jdk.CollectionConverters
udostępniaasJava
za pośrednictwem pimpSeq
i zastępuje pakietyscala.collection.JavaConverters/JavaConversions
:źródło
Odpowiem na dość stare pytania, ale większość sugestii jest przestarzała.
źródło
object JavaConversions in package collection is deprecated (since 2.12.0): use JavaConverters
Aktualizacja
ze skalą 2.9.2:
wynik
źródło
W przypadku pojedynczych wywołań wykonanie tego ręcznie może być najprostszym rozwiązaniem:
Nie mierzyłem wydajności.
źródło
Postępowanie zgodnie z powyższą propozycją tworzy niezmienną listę nawet po stronie Javy. Jedyne działające rozwiązanie, które znalazłem, to:
źródło
Od Scala 2.12.0 JavaConversions jest przestarzała.
Więc najprostszym rozwiązaniem dla mnie było:
źródło
import scala.collection.JavaConverters._
2.12.4