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.