복붙노트

[SCALA] 스칼라 모음으로 자바 컬렉션을 변환

SCALA

스칼라 모음으로 자바 컬렉션을 변환

나는 스칼라 수집 목록에 자바 컬렉션 (java.util.List에의 말을) 변환 어떻게, 새로운 HashSet의 (컬렉션)의 스택 오버플로 질문 스칼라 해당 관련?

실제로를 java.util.List 를 반환 봄의 인 SimpleJdbcTemplate에 자바 API 호출을 변환하기 위해 노력하고, 스칼라 불변 HashSet에 넣습니다. 그래서 예를 들면 :

val l: java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l

이 일 것으로 보인다. 비판을 환영합니다!

import scala.collection.immutable.Set
import scala.collection.jcl.Buffer 
val s: scala.collection.Set[String] =
                      Set(Buffer(javaApi.query( ... ) ) : _ *)

해결법

  1. ==============================

    1.귀하의 마지막 제안은 작동하지만, 당신은 또한 jcl.Buffer를 사용하여 피할 수 있습니다 :

    귀하의 마지막 제안은 작동하지만, 당신은 또한 jcl.Buffer를 사용하여 피할 수 있습니다 :

    Set(javaApi.query(...).toArray: _*)
    

    scala.collection.immutable.Set가 Predef.scala 기본적 감사로 사용할 수 있습니다 있습니다.

  2. ==============================

    2.미래 참고 : 스칼라 2.8으로, 그것은 다음과 같이 할 수있다 :

    미래 참고 : 스칼라 2.8으로, 그것은 다음과 같이 할 수있다 :

    import scala.collection.JavaConversions._
    val list = new java.util.ArrayList[String]()
    list.add("test")
    val set = list.toSet
    

    내용물이 후 scala.collection.immutable.Set [문자열]이다.

    또한 지금 추천하는 것보다 명시 적 방법 (사용 JavaConverters), 벤 제임스의 대답을 참조하십시오.

  3. ==============================

    3.당신이 JavaConversions이 robinst의 대답에서 보여준 것보다 더 명시하려면 JavaConverters을 사용할 수 있습니다 :

    당신이 JavaConversions이 robinst의 대답에서 보여준 것보다 더 명시하려면 JavaConverters을 사용할 수 있습니다 :

    import scala.collection.JavaConverters._
    val l = new java.util.ArrayList[java.lang.String]
    val s = l.asScala.toSet
    
  4. ==============================

    4.JavaConversions (robinst의 대답)과 JavaConverters (벤 제임스의 대답은) 스칼라 2.10로 사용되지 않습니다.

    JavaConversions (robinst의 대답)과 JavaConverters (벤 제임스의 대답은) 스칼라 2.10로 사용되지 않습니다.

    대신 JavaConversions의 사용 :

    import scala.collection.convert.wrapAll._
    

    같은 aleksandr_hramcov에 의해 제안했다.

    대신 JavaConverters의 사용 :

    import scala.collection.convert.decorateAll._
    

    두 경우에만 예컨대, 각각 Java 또는 스칼라로 변환 / 컨버터를 가져올 수있는 가능성도 있습니다 :

    import scala.collection.convert.wrapAsScala._
    

    최신 정보: JavaConversions 및 JavaConverters가 사용되지 않는 것을 위의 문장은 잘못된 것 같다. 를 가져올 때 사용 중단 경고 결과 스칼라 2.10에서 일부 사용되지 않는 특성이 있었다. 그래서 여기에 대체 수입에만 별칭 것 같다. 나는 여전히 선호하지만, 이럴로 이름이 더 적합합니다.

  5. ==============================

    5.scalaj 수집 자바와 스칼라 컬렉션 사이의 양방향 변환을 가지고 : 당신이 훌륭한 라이브러리를 탐색 할 수 있습니다. 귀하의 경우에는, 스칼라 목록이 작업을 수행 할 수 있습니다에를 java.util.List를 변환 :

    scalaj 수집 자바와 스칼라 컬렉션 사이의 양방향 변환을 가지고 : 당신이 훌륭한 라이브러리를 탐색 할 수 있습니다. 귀하의 경우에는, 스칼라 목록이 작업을 수행 할 수 있습니다에를 java.util.List를 변환 :

    val list = new java.util.ArrayList[java.lang.String]
    list.add("A")
    list.add("B")
    list.asScala
    
  6. ==============================

    6.

    val array = java.util.Arrays.asList("one","two","three").toArray
    
    val list = array.toList.map(_.asInstanceOf[String])
    
  7. ==============================

    7.당신은 세트 매개 변수화 만들기 위해 toArray 호출에서 형식 정보를 추가 할 수 있습니다 :

    당신은 세트 매개 변수화 만들기 위해 toArray 호출에서 형식 정보를 추가 할 수 있습니다 :

     val s = Set(javaApi.query(....).toArray(new Array[String](0)) : _*)
    

    컬렉션 패키지는 스칼라 2.8에 대한 주요 재를 통과하고 scala.collection.jcl 패키지가 떨어진 것입니다 이것은 바람직 수 있습니다

  8. ==============================

    8.또 다른 간단한 방법은이 문제를 해결하기 위해 :

    또 다른 간단한 방법은이 문제를 해결하기 위해 :

    import collection.convert.wrapAll._
    
  9. ==============================

    9.당신은 배열에 자바 컬렉션을 변환하고 그에서 스칼라 목록을 만들 수 있습니다 :

    당신은 배열에 자바 컬렉션을 변환하고 그에서 스칼라 목록을 만들 수 있습니다 :

    val array = java.util.Arrays.asList("one","two","three").toArray
    val list = List.fromArray(array)
    
  10. ==============================

    10.스칼라 2.13부터, 패키지 scala.jdk.CollectionConverters은 / JavaConversions._을 패키지 scala.collection.JavaConverters를 대체합니다

    스칼라 2.13부터, 패키지 scala.jdk.CollectionConverters은 / JavaConversions._을 패키지 scala.collection.JavaConverters를 대체합니다

    import scala.jdk.CollectionConverters._
    
    // val javaList: java.util.List[String] = java.util.Arrays.asList("one","two","three")
    javaList.asScala
    // collection.mutable.Buffer[String] = Buffer("one", "two", "three")
    javaList.asScala.toSet
    // collection.immutable.Set[String] = Set("one", "two", "three")
    
  11. from https://stackoverflow.com/questions/674713/converting-a-java-collection-into-a-scala-collection by cc-by-sa and MIT license