Получить логическое значение для частичного совпадения объекта (Java) - PullRequest
1 голос
/ 25 сентября 2011

Я думаю, что это простой вопрос, если бы я мог найти условия поиска, чтобы описать это. Это похоже на Поиск всех объектов, которые имеют данное свойство, внутри коллекции , за исключением того, что я просто хочу получить логический результат "есть ли он".

Скажем, у меня есть отсортированный набор деревьев Кошек, у каждого из которых есть имя, возраст, еда и т. Д. У меня есть кое-что сложное для каждой потенциальной кошки, но я хочу пропустить ее, если в моей кошке уже есть кошка. TreeSet с этим именем. Мне все равно, если какие-либо другие атрибуты совпадают. Я, очевидно, не могу сделать if (!AlltheCats.contains(candidateName))..., потому что тогда у меня будет несоответствие типов между строкой candidName и объектом Cat. Но я не думаю, что смогу создать объект для поиска идентичного соответствия, потому что меня не волнуют значения возраста, питания и т. Д.

Какой эффективный / элегантный способ сделать это?

1 Ответ

3 голосов
/ 25 сентября 2011

Создайте HashSet строк, содержащих имена, каждый раз, когда вы вызываете свой метод для кошки, сначала проверяйте, есть ли он уже в наборе, и, если это так, пропустите эту кошку.Изменяйте этот набор по мере продолжения.

(*) Этот ответ предполагает, что вы хотите вызвать метод для одного кота [а не 0] с одинаковым именем.

Должно выглядеть примерно так:

    Set<String> names = new HashSet<String>();
    for (Cat c : set) { 
        if (names.contains(c.getName())) {
            continue;
        }
        names.add(c.getName());
        c.foo(); //your method here
    }
...