私は LinkedHashSet
、つまり順序集合を持っています。セットのサブセット、つまりセットの最初の20要素を返す関数を見つけようとしています。新しいセットを作成し、最初のセットの反復を使用してデータを入力することでそれができることはわかっていますが、もっと簡潔なものを望んでいました。
また、GoogleのGuavaライブラリも調べましたが、必要なものが見つかりませんでした。
私は LinkedHashSet
、つまり順序集合を持っています。セットのサブセット、つまりセットの最初の20要素を返す関数を見つけようとしています。新しいセットを作成し、最初のセットの反復を使用してデータを入力することでそれができることはわかっていますが、もっと簡潔なものを望んでいました。
また、GoogleのGuavaライブラリも調べましたが、必要なものが見つかりませんでした。
グアバで:
Set<Integer> subset = ImmutableSet.copyOf(Iterables.limit(set, 20));
Iterables.limit()
は遅延評価されるため、追加のコレクションが 1 つだけ作成されることに注意してください。
ストリームとコレクターを使用したソリューション:
Set<Integer> subSet = set.stream()
// .skip(10) // Use this to get elements later in the stream
.limit(20)
.collect(toCollection(LinkedHashSet::new));
// You could also collect to something else
// with another collector like this:
// .collect(toList());
これは、次のインポートを前提としています。
import static java.util.stream.Collectors.toCollection;
あなたはこれを行うことができます:
Set<Integer> set = new LinkedHashSet<>();
for (int i = 0; i < 50; i++) {
set.add(i);
}
List<Integer> list = new ArrayList<>(set);
Set<Integer> subSet = new LinkedHashSet<>(list.subList(0, 20));
メソッドが存在するため、最初は aSortedSet
を使用できます。subSet
セットのコンテンツを に追加して、そのメソッドList
を使用することもできます。ただし、膨大な量のデータを複製したくないため、subList
保存されているデータの量によって異なります。Set
それ以外の場合は、より効率的な Set の反復を使用する必要があります。