2017-08-22 18 views
0

私は、Java、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

あなたは、変換タイプとmap機能と直接変換を行うことができますarrayArrayClassと漠然と建設およびネストされたフィールドのための必要はありません。あなたは、一時的としてArrayListのために必要がない場合は

import scala.collection.JavaConversions._ 

val javaList = new java.util.ArrayList[Int]() 
val result = javaList.iterator.toList.map(_.getAsInt) 

結果の所有者の場合は、正しいタイプにキャストしてください:

val ints = javaList.iterator 
         .asInstanceOf[java.util.Iterator[Int]] 
         .toList.map(_.getAsInt) 

ウィットを処理したくない場合は時間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()); 

結果では、あなたが整数のリストを取得します、選択はあなた次第です。

関連する問題