配列(リスト)のデータ型をを相互に変換するには (asList / asScala / asJava / to_a / toArray)

Java

java.util.List のインスタンスを配列に変換するには

ArrayList<String> list = ...;
String[] arr = new String[list.size()];
list.toArray(arr);

配列を java.util.List に変換するには

import java.util.Arrays;

String[] arr = ...;
List<String> list = Arrays.asList(arr);

Scala

ScalaのコレクションからJavaの配列に変換するには

Signature:

// scala.collection.TraversableOnce[A]
def toArray: Array[A]

JavaのコレクションからScalaのコレクションに変換したい場合は、 Javaのコレクションに対して asScala メソッドを呼び出せばよい。逆にScalaのコレクションをJavaのコレクションに変換したい場合は、 Scalaのコレクションに対して asJava メソッドを呼び出せばよい。ただし、asScalaasJava はScalaの implicit conversions の機能で使えるメソッドで、 scala.collection.JavaConverters._ をインポートしておく必要がある。

import scala.collection.JavaConverters._;

// JavaコレクションからScalaコレクションに変換
javaCollection.asScala

// ScalaコレクションからJavaコレクションに変換
scalaCollection.asJava

Python

# リストをタプルに変換
tpl = tuple(lst)

# タプルをリストに変換
lst = list(tpl)

# 文字列を1文字ずつの要素のリストに変換
lst = list(str)

Ruby

範囲オブジェクトから配列に変換

Enumerable#to_a または Enumerable#entries を使う。範囲オブジェクト(Range)はEnumerableをインクルードしているので、 Enumerableにあるメソッドを使える。

# 範囲オブジェクト
p (1 .. 10)
# => 1..10

# 配列に変換
p (1 .. 10).to_a
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Array#to_a, Array#entries | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/entries.html

JRuby

Rubyの配列をJavaの配列に変換

Array#to_java を使う。

arr = [10, 20, 30, 40, 50]

p arr
# => [10, 20, 30, 40, 50]

p arr.to_java
# => java.lang.Object[10, 20, 30, 40, 50]@214eea30

p arr.to_java.toString()
# => "[Ljava.lang.Object;@43f10665"

p arr.to_java(:int)
# => int[10, 20, 30, 40, 50]@4daf3bc

p arr.to_java(:int).toString()
# => "[I@42b7be21"

p arr.to_java("java.lang.Integer")
# => `java.lang.Integer[10, 20, 30, 40, 50]@35d95c7d`

p arr.to_java("java.lang.Integer").toString()
# => "[Ljava.lang.Integer;@51472e29"

to_java の引数には以下のようなものを指定できる。指定しないと :object とみなされる。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。