2017-08-22 99 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()); 

在結果中,您將獲得的整數列表,選擇是你的。