Java 如何与抽象枚举进行比较?

Java 如何与抽象枚举进行比较?,java,enumeration,organization,Java,Enumeration,Organization,我正在研究一种搜索/组织算法。我使用多个enum来定义我想要组织的每一段数据。例如: enum CarType implements SearchFactor { CAR, SUV, TRUCK, SEMI, LIMO; @Override public SearchFactor getSearchFactor() { return this; } } Vehicle[] getVehicleFromSearchFactor(SearchFactor[] factors) {

我正在研究一种搜索/组织算法。我使用多个
enum
来定义我想要组织的每一段数据。例如:

enum CarType implements SearchFactor {
    CAR, SUV, TRUCK, SEMI, LIMO;
    @Override public SearchFactor getSearchFactor() { return this; }
}
Vehicle[] getVehicleFromSearchFactor(SearchFactor[] factors) {
    ArrayList<Vehicle> factoredVehicles = new ArrayList<Vehicle>();
    for (Vehicle v : getListOfVehicles()) {
        for (SearchFactor f : factors) {
            if (v.type == f || v.color == f) {
                factoredVehicles.add(v);
                break;
            }
        }
    }
    return factoredVehicles;
}

其中
SearchFactor
为:

interface SearchFactor { }
一个示例数据类是:

class Vehicle {
    CarType type = CarType.CAR;
    PaintColor color = PaintColor.BLACK;
}
现在对于组织部分,我只需创建一个包含的
SearchFactor
数组,并添加我希望算法遵循的
SearchFactor
的枚举。这是通过逐步遍历
车辆
s数组,并将
车辆
s
类型
颜色
与包含的
搜索因子
数组进行比较来实现的。例如:

enum CarType implements SearchFactor {
    CAR, SUV, TRUCK, SEMI, LIMO;
    @Override public SearchFactor getSearchFactor() { return this; }
}
Vehicle[] getVehicleFromSearchFactor(SearchFactor[] factors) {
    ArrayList<Vehicle> factoredVehicles = new ArrayList<Vehicle>();
    for (Vehicle v : getListOfVehicles()) {
        for (SearchFactor f : factors) {
            if (v.type == f || v.color == f) {
                factoredVehicles.add(v);
                break;
            }
        }
    }
    return factoredVehicles;
}
Vehicle[]getVehicleFromSearchFactor(SearchFactor[]factors){
ArrayList factoredVehicles=新ArrayList();
对于(车辆v:getListOfVehicles()){
对于(搜索因子f:因子){
如果(v.type==f | | v.color==f){
系数化车辆。添加(v);
打破
}
}
}
返回系数车辆;
}

这是好的做法吗?这是不是太抽象了?

一个
getSearchFactor()
方法的要点是什么,它只作为
返回这个

它甚至没有在
getVehicleFromSearchFactor
方法中使用

除此之外,为什么不呢。只需确保
==
是比较搜索因素的正确方法。对于
enum
s这很好,但是对于其他对象
。equals(…)
可能更好。。。甚至
.appliesTo(…)
或诸如此类


(当然,您以这种方式进行的搜索不允许建立索引,并且具有O(车辆数量×搜索因子数量)的时间复杂性。)

同意上面关于“getSearchFactor()”方法的回答


除了上面的答案,在我看来,通过您可能正在使用的任何持久化层或一些额外的索引技术(如Lucene/Solr),这可能会得到更好的处理。

Ya在午餐时意识到了
getsearchFactor
的要点(缺少)。你说的“索引”是什么意思?谢谢你的链接,它很有帮助。最后一件事,如果你不介意的话。你对如何优化搜索到比O(N*SF)更好的东西有什么建议吗?这取决于你的用例。例如,您可以使用
EnumMap
EnumMap
,或通用
HashMap
,在其中可以查找具有特定颜色/类型/搜索因子的所有车辆。好的,这是有意义的。谢谢你的指点。哈,我甚至不知道
EnumMap
。再次感谢。