Java のコレクション
💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。
Flix は Java のコレクションとの相互変換をサポートしています。
以下では、次のインポートエイリアスを使用します:
import java.util.{List => JList}
import java.util.{LinkedList => JLinkedList}
import java.util.{ArrayList => JArrayList}
import java.util.{Set => JSet}
import java.util.{TreeSet => JTreeSet}
import java.util.{Map => JMap}
import java.util.{TreeMap => JTreeMap}
次の関数は Adaptor モジュールで利用できます:
Flix から Java へ
次の関数は Flix のコレクションを Java のコレクションに変換します:
///
/// リスト
///
def toList(ma: m[a]): JList[a] \ IO + Aef[m] with Foldable[m]
def toArrayList(ma: m[a]): JArrayList[a] \ IO + Aef[m] with Foldable[m]
def toLinkedList(ma: m[a]): JLinkedList[a] \ IO + Aef[m] with Foldable[m]
///
/// セット
///
def toSet(ma: m[a]): JSet[a] \ IO + Aef[m] with Order[a], Foldable[m]
def toTreeSet(ma: m[a]): JTreeSet[a] \ IO + Aef[m] with Order[a], Foldable[m]
///
/// マップ
///
def toMap(m: Map[k, v]): JMap[k, v] \ IO with Order[k]
def toTreeMap(m: Map[k, v]): JTreeMap[k, v] \ IO with Order[k]
各関数は新しいコレクションを構築し、すべての要素をそこにコピーします。そのため、各操作には少なくとも線形時間がかかります。結果は通常の Java コレクションであり、変更することもできます。
Java から Flix へ
次の関数は Java のコレクションを Flix のコレクションに変換します:
/// リスト
def fromList(l: JList[a]): List[a]
/// セット
def fromSet(l: JSet[a]): Set[a] with Order[a]
/// マップ
def fromMap(m: JMap[k, v]): Map[k, v] with Order[k]
各関数は Java のコレクションから新しい Flix のコレクションを構築します。そのため、各操作には少なくとも線形時間がかかります。なお、Set と Map については、Flix のコレクションは a に定義された Order[a] インスタンスを使用します。これは Java が使用する順序と同じであるとは限りません。
警告: プリミティブ値を持つ Flix や Java のコレクションを変換する際には、特別な注意が必要です。特に、変換の前に値を手動でボックス化(boxing)またはアンボックス化(unboxing)しなければなりません。