使用比较器获取集合的子集
Get subSet of set by using comparator
是否可以通过一些比较器获取集合过滤的子集,并让父集合的每次更新及其子集获得所有更改?
NavigableSet.subSet()
调用可能会执行您想要的操作。 NavigableSet
是一个排序集,能够创建基础集 "views" 的子集。这些视图受您提供的值的限制,使用在创建集合时提供的 Comparator
或值的自然顺序。最常见的实现是 TreeSet
。例如,您可以这样做:
NavigableSet<String> set = new TreeSet<>(
Arrays.asList("b", "e", "a", "d", "c"));
System.out.println(set);
结果如您所料 [a, b, c, d, e]
。现在您可以创建一个子集,例如从 "b" 到 "d" 包括:
NavigableSet<String> set2 = set.subSet("b", true, "d", true);
System.out.println(set2);
这里的输出是[b, c, d]
。现在,如果您将一些既在边界内又在边界外的元素添加到原始集合中,子集视图将更改为仅包括在边界内添加的元素:
set.add("a1");
set.add("c1");
set.add("e1");
System.out.println(set2);
输出为[b, c, c1, d]
。
是否可以通过一些比较器获取集合过滤的子集,并让父集合的每次更新及其子集获得所有更改?
NavigableSet.subSet()
调用可能会执行您想要的操作。 NavigableSet
是一个排序集,能够创建基础集 "views" 的子集。这些视图受您提供的值的限制,使用在创建集合时提供的 Comparator
或值的自然顺序。最常见的实现是 TreeSet
。例如,您可以这样做:
NavigableSet<String> set = new TreeSet<>(
Arrays.asList("b", "e", "a", "d", "c"));
System.out.println(set);
结果如您所料 [a, b, c, d, e]
。现在您可以创建一个子集,例如从 "b" 到 "d" 包括:
NavigableSet<String> set2 = set.subSet("b", true, "d", true);
System.out.println(set2);
这里的输出是[b, c, d]
。现在,如果您将一些既在边界内又在边界外的元素添加到原始集合中,子集视图将更改为仅包括在边界内添加的元素:
set.add("a1");
set.add("c1");
set.add("e1");
System.out.println(set2);
输出为[b, c, c1, d]
。