使用比较器获取set的subSet

use*_*rbb 5 java collections subset comparator

是否有可能通过某个比较器获取集合过滤子集,并且父集合及其子集的每次更新都会得到所有更改?

Stu*_*rks 3

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

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

结果[a, b, c, d, e]如您所料。现在您可以创建一个子集,例如从“b”到“d”(包括“b”和“d”):

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

这里的输出是[b, c, d]. 现在,如果您向原始集合添加一些位于边界内部和外部的元素,子集视图将更改为仅包含添加到内部的内容:

    set.add("a1");
    set.add("c1");
    set.add("e1");
    System.out.println(set2);
Run Code Online (Sandbox Code Playgroud)

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