26.2.1.1.2 セッションバインド・コレクション
グラフを必要とせずに、セッション内でコレクションを直接作成および操作できます。セッションバインド・コレクションは、さらに、グラフ・アルゴリズムにパラメータとして渡すことや、他のコレクション・オブジェクトと同様に使用することができます。次の各サブセクションでは、これらのコレクションで現在サポートされているタイプについて説明します。
スカラー・コレクション
スカラー・コレクションには、Integer
、Long
、Float
、Double
、Boolean
などの単純なデータ型が含まれます。これらは、PgxSession
APIによって管理できます。
スカラー・コレクションの作成
次のコードに示すように、createSet()
およびcreateSequence()
メソッドを使用してスカラー・コレクションを作成できます。
myIntSet = session.createSet(PropertyType.INTEGER, "myIntSet")
myDoubleSequence = session.createSequence(PropertyType.DOUBLE) // A name will be automatically generated if none is provided.
println myDoubleSequence.getName() // Display the generated name.
import oracle.pgx.api.*;
import oracle.pgx.common.types.*;
...
ScalarSet myIntSet = session.createSet(PropertyType.INTEGER, "myIntSet");
ScalarSequence myDoubleSequence = session.createSequence(PropertyType.DOUBLE);
System.out.println(myDoubleSequence.getName());
スカラー・コレクションでの操作の実行
次のコードに示すように、スカラー・コレクションで様々な操作を実行できます。
myIntSet.add(10)
myIntSet.addAll([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
myIntSet.addAll([0,1,2]) // Element uniqueness. This operation has no effect on the set.
println myIntSet
myIntSet.contains(1) // Checks the presence of an element. This code returns `true`.
myIntSet.remove(10)
myIntSet.removeAll([4, 5, 6, 7, 8, 9]) // Leaves only elements `0, 1, 2, 3`.
println myIntSet
import java.util.Arrays;
import oracle.pgx.api.*;
...
myIntSet.add(10);
myIntSet.addAll(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
myIntSet.addAll(Arrays.asList(0, 1, 2));
myIntSet.contains(1); // Returns `true`.
myIntSet.remove(10);
myIntSet.removeAll(Arrays.asList(4, 5, 6, 7, 8, 9));
スカラー・コレクションのトラバース
スカラー・コレクションは、イテレータを使用してトラバースすることも、新しいStream APIを使用してトラバースすることもできます。順序の要素をセットに追加し、順序をトラバースして、不要な要素をフィルタで除外した後、残りを別のスカラー・コレクションに追加できます。
myIntSet.forEach({x -> print x + "\n"})
myIntSet.stream().filter({x -> x % 2 == 0}).forEach({x -> myDoubleSequence.add(x)})
println myDoubleSequence
import java.util.Iterator;
import java.util.stream.Stream;
import oracle.pgx.api.*;
...
myIntSet.forEach(x -> System.out.println(x));
myIntSet.stream().filter(x -> x % 2 == 0).forEach(myDoubleSequence::add);
親トピック: コレクション・データ型