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

scala gson array elements to scala ArrayList[Int]

我在 java、gson、scala 之间来回转换时遇到问题。我应该怎么做。

我的 objective 应该如何以功能方式收集 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 和嵌套字段 array 进行模糊构造,您可以使用转换类型和 map 函数进行直接转换:

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 的集合,只需创建一个迭代器 returns getAsInt 并通过 Guava:[=21 将其转换为 ArrayList =]

import com.google.common.collect.Lists;

Iterator<Integer> ints = ....
List<Integer> myList = Lists.newArrayList(ints);

或同ArrayClass

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

结果,您将获得整数列表,选择权在您。