Как сравнить с абстрактными перечислениями? - PullRequest
0 голосов
/ 16 августа 2011

Я работаю над поисковым / организационным алгоритмом.Я использую несколько enum для определения каждой части данных, которые я хотел бы организовать.Например:

enum CarType implements SearchFactor {
    CAR, SUV, TRUCK, SEMI, LIMO;
    @Override public SearchFactor getSearchFactor() { return this; }
}

и

enum PaintColor implements SearchFactor {
    BLACK, WHITE, BLUE, GRAY, RED;
    @Override public SearchFactor getSearchFactor() { return this; }
}

, где SearchFactor:

interface SearchFactor { }

, а примерный класс данных будет:

class Vehicle {
    CarType type = CarType.CAR;
    PaintColor color = PaintColor.BLACK;
}

Теперь для организационной части я просто создаю массив включенных SearchFactor и добавляю перечисление того, что SearchFactor я бы хотел, чтобы алгоритм следовал.Это делается путем постепенного обхода массива Vehicle с и сравнения Vehicle s type и color с массивом включенных SearchFactor с.Например:

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;
}

Это хорошая практика?Это слишком абстрактно?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Какой смысл метода getSearchFactor(), который реализован только как return this?

Он даже не используется в вашем getVehicleFromSearchFactor методе.

Кроме этого, почему бы и нет. Просто убедитесь, что == является правильным способом для сравнения ваших поисковых факторов. Для enum s это хорошо, но для других объектов .equals(...) может быть лучше ... или даже .appliesTo(...) или что-то подобное.

(Конечно, ваш поиск таким образом не позволяет индексировать и имеет O (количество транспортных средств × количество факторов поиска) сложность времени.)

0 голосов
/ 16 августа 2011

Согласитесь с ответом выше re: метод "getSearchFactor ()".

В дополнение к ответу выше, мне кажется, это может быть лучше обработано через любой сохраняемый слой, который вы используете, или какую-то дополнительную технологию индексации.такие как Lucene / Solr.

...