2016-02-02 11 views
5

コンパレータによってコレクションフィルタリングのサブセットを取得し、すべての更新を親コレクションとそのサブセットですべて変更できますか?コンパレータを使用してセットのサブセットを取得

+0

あなたのコレクションに「トリガ」を追加することは、リストに追加されている要素をフィルタリングすることですか? –

+1

これは、クラスがある種のobservable-interfaceを実装しなければならないので、これは通常のコレクションではできないと思います。どちらかというと、元のコレクションで何か変更があった場合に備え、毎回すべての要素をテストする必要があります。 –

+1

'NavigableSet.subSet()'は何をしますか? –

答えて

3

NavigableSet.subSet()コールが必要な場合があります。 NavigableSetはソートセットで、基になるセットの「ビュー」であるサブセットを作成することができます。これらのビューは、セットの作成時に提供されるComparatorまたは値の自然順序を使用して、指定した値で囲まれます。最も一般的な実装はTreeSetです。たとえば、あなたがこれを行うことができます:

NavigableSet<String> set = new TreeSet<>(
     Arrays.asList("b", "e", "a", "d", "c")); 
    System.out.println(set); 

を結果は、あなたが期待するよう[a, b, c, d, e]です。ここでは出力が[b, c, d]ある

NavigableSet<String> set2 = set.subSet("b", true, "d", true); 
    System.out.println(set2); 

:今、あなたは、「B」から「D」を含めて、たとえば、サブセットを作成することができます。今、あなたは内部追加されていますものだけを含めるように境界の内側と外側の両方にある元のセット、サブセットのビューの変更にいくつかの要素を追加した場合:

set.add("a1"); 
    set.add("c1"); 
    set.add("e1"); 
    System.out.println(set2); 

を出力[b, c, c1, d]です。

+0

私が望むのは、 "b"から "d"までのサブセットを作成するのではなく、毎秒私のために選択するサブセット、つまりサブセットです。私は非連続的な選択は難しいので、そのような一般的なcontairnerはないと推測します。しかし、TreeSetが、要素を奇数と偶数に分割するコンパレータを持つ場合。私は、そのコンパレータを使用して最初または2番目のサブセットをします。 – userbb

+0

@userbb OK、私はTreeSetのコンパレータがあなたが望むことができるとは思わない。コンパレータは、セット内のすべての要素の* total order *を設定します。作成時に設定されたセットの固定プロパティです。たとえば、クエリ操作内で設定することはできません。述語を持つフィルターのようなものが必要なように思えますが、ユースケースについて詳しく説明する必要があると思います。私と他の人たちはかなりの推測をしています。 –

関連する問題