Java.util.List'i Scala listesine dönüştürme


105

Aşağıdaki hata ile bu Scala yöntemine sahibim. Scala listesine dönüştürülemez.

 def findAllQuestion():List[Question]={
   questionDao.getAllQuestions()
 } 

tür uyumsuzluğu; bulunan: java.util.List[com.aitrich.learnware.model.domain.entity.Question]gerekli: scala.collection.immutable.List[com.aitrich.learnware.model.domain.entity.Question]


3
Bu soruya bakan arkadaşlar, başka bir ilgi çekici soruyu bulabilir: stackoverflow.com/questions/8301947/…
Amndeep7

Yanıtlar:


70
import scala.collection.JavaConversions._

sizin için örtük dönüştürme yapacak; Örneğin:

var list = new java.util.ArrayList[Int](1,2,3)
list.foreach{println}

11
scala.collection.JavaConversions._lehine kullanımdan kaldırıldı, buscala.collection.JavaConverters._ yüzden bu cevap daha iyi
Dexter Legaspi

JavaConverts, scala.jdk.CollectionConverters._2.13 itibariyle kullanımdan kaldırılmıştır . Detaylar burada bulunabilir .
Steven Levine

123

Listeyi Scala'yı kullanarak kolayca dönüştürebilirsiniz JavaConverters:

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  questionDao.getAllQuestions().asScala
}

2
Bu çalışıyor gibi görünüyor .. def findAllStudentTest (): List [StudentTest] = {var list = studentTest Dao.getAllStudentTests () var slist = list.asScala.toList slist}
boycod3

13
bir java.util.List .asScala tuhaf bir şekilde benim için tampon olarak geri geliyor.
phillro

2
Ben de: `scala> import scala.collection.JavaConverters._` import scala.collection.JavaConverters._ scala> val l = new java.util.ArrayList [java.lang.String] l: java.util.ArrayList [String ] = [] scala> l.add ("hi") res70: Boolean = true scala> l.add ("de") res71: Boolean = true scala> l.asScala res72: scala.collection.mutable.Buffer [String ] = Tampon (merhaba, de) `
kritium

2
@mauhiz Scala Bufferbir Java ise List, hiçbir şey yolunda gitmez ! OP, Java Listesinden değişmez bir Scala Listesine dönüşüm istedi. Scala Listbekleyen ifadeler, bir Buffer.
Andres F.

4
eklemeyi unuttunuz, .toList bu yüzden kodquestionDao.getAllQuestions().asScala.toList
Raymond Chenon

30
def findAllStudentTest(): List[StudentTest] = { 
  studentTestDao.getAllStudentTests().asScala.toList
} 

3
Neden vars? Ayrıca, son iki satır tek bir satırda birleştirilebilir gibi görünüyorlist.asScala.toList
redent84

ilk var listesi java kullanım listesini alacak ve ikinci slist java kullanım listesini scala listesine dönüştürecektir.
boycod3

4
Demek istediğim, neden değişkeni değiştirmiyorsanız varbunun yerineval
redent84

Ancak alt işlemlerde, val yerine var kullanmamız gerekir.
boycod3

Hem var listhem val slistde gereksizdi. Sanırım bu cevabı daha karmaşık hale getirdiler, bu yüzden onları pekiştirdim ve cevabı daha basit hale getirdim. @ jijeshvu07 Kabul etmiyorsanız, düzenlemeyi geri alıp bu değişikliği kendi cevabı olarak göndermekten memnuniyet duyarım.
Cory Klein

9

Başlangıç Scala 2.13, paket scala.collection.JavaConverterslehine önerilmemektedir olarak işaretlenir scala.jdk.CollectionConverters:

import scala.jdk.CollectionConverters._

// val javaList: java.util.List[Int] = java.util.Arrays.asList(1, 2, 3)
javaList.asScala.toList
// List[Int] = List(1, 2, 3)

6

Al JavaConverters, @fynn'in yanıtı eksiktitoList

import scala.collection.JavaConverters._

def findAllQuestion():List[Question] = {
  //           java.util.List -> Buffer -> List
  questionDao.getAllQuestions().asScala.toList
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.