2017-08-22 87 views
0

我正面临在java,gson,scala之间来回转换的问题。我应该怎么做。scala gson数组元素到scala ArrayList [Int]

我应该如何做功能方式我的目标是收集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))** 
    } 

回答

1

你不需要含糊的建设与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) 

如果您不想处理智慧^ h Scala的藏品只是让返回getAsInt一个迭代器,它通过Guava转换为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()); 

在结果中,您将获得的整数列表,选择是你的。