scala gson数组元素到scala ArrayList[Int]

scala gson数组元素到scala ArrayList[Int],scala,gson,scala-java-interop,Scala,Gson,Scala Java Interop,我面临在java、gson和scala之间来回转换的问题。我该怎么做呢 我的目标是收集jsonArray的所有数组元素,并将其填充到ArrayClass数组中 import java.lang.reflect.Type import java.util.ArrayList import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializer import com.google.gson

我面临在java、gson和scala之间来回转换的问题。我该怎么做呢

我的目标是收集jsonArray的所有数组元素,并将其填充到ArrayClass数组中

import java.lang.reflect.Type
import java.util.ArrayList

import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import scala.collection.JavaConversions._

class ArrayClass {
  var array = new ArrayList[Int]
}

class ArrayClassDeserializer extends JsonDeserializer[ArrayClass] {

  def deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): ArrayClass = {
    val jsonObject = json.getAsJsonObject
    val jsonArray = jsonObject.get("array").getAsJsonArray
    val arrayClass = new ArrayClass
    val arraylist = new ArrayList[JsonElement]()
    **jsonArray.iterator().foreach(e => arrayClass.array.add(e.getAsInt))**
  }

您不需要使用ArrayClass和嵌套字段数组进行模糊构造,您可以使用转换后的类型和映射函数进行直接转换:

import scala.collection.JavaConversions._

val javaList = new java.util.ArrayList[Int]()
val result = javaList.iterator.toList.map(_.getAsInt)
如果不需要ArrayList作为临时结果持有者,只需将其转换为正确的类型:

 val ints = javaList.iterator
                      .asInstanceOf[java.util.Iterator[Int]]
                      .toList.map(_.getAsInt)
如果您不想处理Scala的集合,只需制作一个迭代器,返回getAsInt并通过Guava将其转换为ArrayList:

或者和ArrayClass一样

Iterator<ArrayClass> ints = ....
List<Integer> myList = Lists.newArrayList(ints).stream.map(p -> p.getAsInt).collect(Collectors.toList());
结果,您将获得整数列表,选择权归您

Iterator<ArrayClass> ints = ....
List<Integer> myList = Lists.newArrayList(ints).stream.map(p -> p.getAsInt).collect(Collectors.toList());