[英]List masking elements from another List in Java
我怎样才能做一个List
或类似的Collection
,代表另一个集合的子集,屏蔽(过滤掉)不想要的成分,但没有创建一个全新的集合结构?
然后可以通过启用/禁用各个元素的可见性来更快地修改第二个列表。 与不断重建另一个单独的收集结构相比,这样做应具有更高的性能。
我想象原始集合中有某种位图视图。
理想情况下,这将是线程安全的,并且如果原始集合被修改,则会快速失败。
例如,由同一主集合支持的两个蒙版集合:
canine
其中包含[dog,wolf],但未引用其他元素。 feline
。 另一个示例:我们有许多LocalDate
对象的列表。 用户出于某些目的选择其中一些日期,也许只选择工作日,而不选择周末。 然后,用户更改其选择,对某些日期进行手动例外。 一个被遮罩的集合不是在每次选择元素时都建立一个新列表,而是要跟踪选择了哪些元素,而忽略其他元素。
我将使用掩码位使用过滤器类别。 每种不同类型的元素将具有不同的掩码位:
enum CategoryBits {
CATEGORY_A = 0x0001;
CATEGORY_B = 0x0002;
CATEGORY_C = 0x0004;
}
然后定义要包括哪些类别的掩码位:
enum MaskBits {
filter1 = CATEGORY_A; //gets only CATEGORY_A items
filter2 = CATEGORY_A | CATEGORY_B; //gets CATEGORY_A and CATEGORY_B items
}
因此,您收藏中的每个商品都将具有以下功能:
CategoryBits categoryBits() const { return CATEGORY_A; } //return whatever category this item is
然后,根据要过滤的项目,可以为容器设置MASK_BITS。 因此,现在只需进行过滤即可:
if(MASK_BITS & item.category() != 0) { //this item is in the categories you want }
这是非常快的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.