Как найти элемент в ArrayList по условию для SomeClass?

Есть какой-то класс, в котором есть различные поля и т.д. Примерно так:

public class SomeClass{
    private String name;
    private String description;

    public SomeClass(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }
}

И есть другой класс, в котором есть ArrayList с SomeClass в качестве типа:

ArrayList<SomeClass> list = new ArrayList<SomeClass>();
list.add(new SomeClass("a", "a"));
list.add(new SomeClass("b", "b"));
list.add(new SomeClass("c", "c"));
list.add(new SomeClass("d", "d"));

Можно ли получить элемент, у которого getName() == "a", не перебирая весь ArrayList?

Простите, если что-то не так. Раньше я кодил только на JS и редко на php.


Ответы (2 шт):

Автор решения: Дмитрий Никифоров

Нет, либо перебирайте в цикле и проверяйте, либо при помощи Stream API:

list.stream().filter(entry -> entry.getName().equals("a")).findFirst().get();

findFirst возвращает Optional, по-хорошему, перед вызовом get нужно проверить, не пустой ли результат. Или какой-то другой метод Optional использовать.

Важно: не используйте == для сравнения строк, для переменных объектного типа этот оператор сравнивает ссылки на объект.

→ Ссылка
Автор решения: igo

Вы можете использовать HashMap где Key - ключ для поиска, Value - значения связанное с конкретным ключом

   Map<String, String> map = new HashMap<String, String>();  // HashMap<Key, Value>

   map.put("a", "a");
   map.put("b", "b");
   map.put("c", "c");
   map.put("d", "d");

   map.get("a")

K getKey(): возвращает ключ объекта отображения

V getValue(): возвращает значение объекта отображения

→ Ссылка