Фильтр Java ArrayList по свойствам элемента - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть ArrayList, содержащий Car объекты, и я хочу получить из этого ArrayList все уникальные имена как String или просто Car объекты, которые соответствуют этим критериям.

EG:

public class Car {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

Теперь у меня есть carArray, который содержит много Car объектов. Чтобы получить уникальные имена, я делаю что-то вроде этого:

Set<String> setOfNames = new HashSet<String>();

for (Car car : carArray) {
    setOfNames.add(car.getName());
}

for (String name : setOfNames) {
    System.out.println(name);
}

Есть ли лучший / более быстрый способ фильтрации ArrayList по свойствам его элементов?

Спасибо!

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Полагаю, вы говорите о некоторых свойствах, таких как функции (доступные на других языках), но недоступные в Java, поэтому лучший подход - использовать сеттеры и геттеры.Поэтому я предлагаю придерживаться вашего кода, так как он работает довольно быстро :)

Удачи, Аркде

1 голос
/ 30 ноября 2011

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

Примечание: если carArray на самом деле Car[], вам не нужно приведение внутри первого циклаПросто сделай for (Car car : carArray).Если это Object[], вы должны переосмыслить свой дизайн, так как в вашем цикле вы в любом случае принимаете, что каждая запись Car.

0 голосов
/ 30 ноября 2011

Содержит ли ваш набор setOfNames уникальные значения?Потому что если это реализация класса Car, то вы не переопределили методы equals и hashCode. Как hashSet гарантирует, что два объекта идентичны?переопределить метод equals и hashcode, чтобы убедиться, что hashset не содержит дубликатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...