Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, есть ли элемент в списке

Короткий ответ

contains() возвращает true, если элемент есть в списке:

void main() {
    var fruits = List.of("apple", "banana", "cherry");
 
    IO.println(fruits.contains("banana"));
    IO.println(fruits.contains("mango"));
}

Результат:

true
false

Позиция

indexOf() возвращает индекс первого вхождения или -1:

void main() {
    var fruits = List.of("apple", "banana", "cherry");
    IO.println(fruits.indexOf("cherry"));
}

Результат:

2

По условию

Для поиска по полю объекта используйте anyMatch():

record User(String name, boolean admin) {}
 
void main() {
    var users = List.of(new User("Anna", false), new User("Oleg", true));
    IO.println(users.stream().anyMatch(User::admin));
}

Результат:

true

Много проверок

contains() у списка просматривает все элементы. Если проверок много, сложите элементы в HashSet — его поиск почти мгновенный:

void main() {
    var banned = new HashSet<>(List.of("spam@x.com", "bot@y.com"));
    var emails = List.of("anna@site.com", "bot@y.com");
 
    for (String email : emails) {
        IO.println(email + " " + (banned.contains(email) ? "blocked" : "ok"));
    }
}

Результат:

anna@site.com ok
bot@y.com blocked

Частая ошибка

Искать объект своего класса без equals(). Обычный класс сравнивает ссылки, поэтому одинаковый по содержимому объект не находится. Записи (record) сравнивают поля автоматически:

class PointClass {
    int x;
    PointClass(int x) { this.x = x; }
}
 
record PointRecord(int x) {}
 
void main() {
    IO.println(List.of(new PointClass(1)).contains(new PointClass(1)));
    IO.println(List.of(new PointRecord(1)).contains(new PointRecord(1)));
}

Результат:

false
true

Функции из этого ответа

  • List.contains() — Проверяет, есть ли элемент в списке.
  • List.indexOf() — Находит позицию элемента в списке.
  • Stream.anyMatch() — Проверяет, подходит ли под условие хотя бы один элемент.
  • HashSet — Множество без повторов на основе хеш-таблицы; порядок не гарантирован.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.