我有一个项目,不同情况下我需要处理大数据集的不同子集。我的代码中有一个名为
例如,如果数据集是由100万个英文单词组成,我想要处理由奇数字母组成的单词子集,那么我可以进行以下操作:
数据收集器根据其实例化时使用的枚举调用
到目前为止,这种方法已经足够强大和灵活,但现在我面临着越来越复杂的情况(例如,收集以元音字母开头的偶数长度单词)。我希望避免为每种情况添加新的
最终用户是指定这些条件的人,我唯一能控制的是我可以指定这些条件的集合。换句话说,最终用户只能从
有没有一种方法可以对我的枚举进行建模,以执行此类操作?我也欢迎其他想法(例如,我应该放弃这种基于枚举的方法来尝试其他方法等)。
Collector
的接口和一个实现了Collector
的类DataCollector
。这个DataCollector
类通过枚举类型的条件实例化,用于创建子集。例如,如果数据集是由100万个英文单词组成,我想要处理由奇数字母组成的单词子集,那么我可以进行以下操作:
DataCollector dataCollector = new DataCollector(CollectionType.WORDS_OF_ODD_LENGTH);
Set<String> fourLetteredWords = dataCollector.collect();
其中CollectionType
是枚举类
enum CollectionType {
WORDS_OF_ODD_LENGTH,
WORDS_OF_EVEN_LENGTH,
STARTING_WITH_VOWEL,
STARTING_WITH_CONSONANT,
....
}
数据收集器根据其实例化时使用的枚举调用
java.util.Predicate
。到目前为止,这种方法已经足够强大和灵活,但现在我面临着越来越复杂的情况(例如,收集以元音字母开头的偶数长度单词)。我希望避免为每种情况添加新的
CollectionType
。我注意到许多这些复杂情况只是对简单情况的逻辑操作(例如,condition_1 &&& (condition_2 || condition_3)
)。最终用户是指定这些条件的人,我唯一能控制的是我可以指定这些条件的集合。换句话说,最终用户只能从
CollectionType
中进行选择。现在,我正在尝试从仅能选择一个条件的能力推广到能够选择一个或多个条件的能力。为此,我需要类似于以下内容:DataCollector dataCollector = new DataCollector(WORDS_OF_ODD_LENGTH &&
STARTING_WITH_VOWEL);
有没有一种方法可以对我的枚举进行建模,以执行此类操作?我也欢迎其他想法(例如,我应该放弃这种基于枚举的方法来尝试其他方法等)。
java.util.Predicate
。 - Boris the Spiderenum implements Predicate<>
呢? 这样优雅而简单 :-) - Chthonic Project