Java 使用比较器获取集合的子集

Java 使用比较器获取集合的子集,java,collections,subset,comparator,Java,Collections,Subset,Comparator,是否可以通过某个比较器获取集合筛选的子集,并使父集合及其子集的每次更新都获得所有更改?调用NavigableSet.subSet()NavigableSet是一个排序集,能够创建作为基础集“视图”的子集。这些视图由您使用集合创建时提供的比较器或值的自然顺序提供的值限定。最常见的实现是TreeSet。例如,您可以执行以下操作: NavigableSet<String> set = new TreeSet<>( Arrays.asList("b", "

是否可以通过某个比较器获取集合筛选的子集,并使父集合及其子集的每次更新都获得所有更改?

调用
NavigableSet.subSet()
NavigableSet
是一个排序集,能够创建作为基础集“视图”的子集。这些视图由您使用集合创建时提供的
比较器
或值的自然顺序提供的值限定。最常见的实现是
TreeSet
。例如,您可以执行以下操作:

    NavigableSet<String> set = new TreeSet<>(
        Arrays.asList("b", "e", "a", "d", "c"));
    System.out.println(set);
这里的输出是
[b,c,d]
。现在,如果向原始集合中添加边界内外的某些元素,则“子集”视图将更改为仅包含已添加的元素:

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

输出是
[b,c,c1,d]

你的意思是向你的集合中添加一种“触发器”,它过滤添加到列表中的元素吗?我认为这对于常规集合是不可能的,因为类必须实现某种可观察的接口。要么这样,要么每次都必须测试所有元素,以防原始集合中发生更改。
NavigableSet.subSet()
是否执行您想要的操作?您的意思是通过某个谓词进行过滤,即所有以“Ab”开头的字符串?好的,我想要的是创建子集,而不是提供从“b”到“d”的值,但是通过一些比较器,即每秒为我选择的子集。我认为选择非连续是很棘手的,所以没有这样的通用container。但若树集有一个比较器,它将奇偶元素分开。我想用这个比较器做第一部分或第二部分。@userbb好的,我不认为TreeSet的比较器可以做你想要的。比较器建立集合中所有元素的总顺序,它是集合的固定属性,在创建时建立。例如,您不能在查询操作中设置它。听起来您需要更像带谓词的过滤器的东西,但我认为您需要更详细地解释您的用例。我和其他人正在做一些猜测。
    set.add("a1");
    set.add("c1");
    set.add("e1");
    System.out.println(set2);