0

Однострочник для проверки наличия элемента в списке

11

У меня есть опыт работы с Java и Python, но сейчас мне нужно проверить, содержится ли элемент в списке и выполнить некоторые действия.

В Python это выглядит следующим образом:

if "a" in ["a", "b", "c"]:
    print("It's there!")

Есть ли в Java какой-то аналогичный однострочный способ, чтобы сделать то же самое, без необходимости создавать ArrayList, Set или другую подобную структуру данных и добавлять элементы в нее поэтапно?

Спасибо!

5 ответ(ов)

0

В JDK 7 такая конструкция не поддерживается, так как в Java нет поддержки литералов коллекций. Поэтому ваш код не будет компилироваться.

Однако, если бы проект Project Coin, включавший литералы для коллекций, был реализован, то правильный синтаксис для проверки наличия элемента в массиве выглядел бы так:

if (Arrays.asList("a", "b", "c").contains("a")) {
    // Ваш код
}

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

Редактирование: К сожалению, проект так и не был реализован, и литералы коллекций не были добавлены в язык. Поэтому вам все еще придется использовать Arrays.asList или другие подходы для проверки наличия элементов в коллекциях.

0

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

if ("|a|b|c|".contains("|a|")) {
    // Ваш код тут
}

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

0

Я бы использовал:

if (Stream.of("a", "b", "c").anyMatch("a"::equals)) {
    // Код для выполнения
}

или:

Stream.of("a", "b", "c")
    .filter("a"::equals)
    .findAny()
    .ifPresent(ignore -> /* Код для выполнения */);

Оба варианта позволяют проверить, есть ли элемент "a" в этом стриме. Первый вариант более лаконичен, но второй может быть предпочтителен, если вы хотите выполнить код только при наличии элемента, и при этом можете дополнительно использовать результат, который возвращает filter. Выбор зависит от ваших предпочтений и конкретного контекста задачи.

0

Если он действительно хочет однострочник без использования коллекций, то вот такой вариант:

for (String s : new String[]{"a", "b", "c"}) if (s.equals("a")) System.out.println("Это есть");

улыбка

(Неужели это некрасиво? Пожалуйста, не используйте это в реальном коде)

0

Вы можете использовать java.util.Arrays.binarySearch, чтобы найти элемент в массиве или проверить его наличие:

import java.util.Arrays;
...

char[] array = new char[] {'a', 'x', 'm'};
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) {
    System.out.println("Да, 'm' присутствует");
}

Обратите внимание, что для корректной работы binarySearch массив должен быть отсортирован. Именно поэтому в примере вызывается Arrays.sort(). Если ваши данные уже отсортированы, вам не нужно этого делать. Таким образом, это не совсем однострочное решение, если вам нужно сначала отсортировать массив. К сожалению, метод Arrays.sort() не возвращает ссылку на массив, следовательно, вы не можете объединить сортировку и поиск (то есть Arrays.binarySearch(Arrays.sort(myArray), ключ) не сработает).

Если вы можете позволить себе дополнительное выделение памяти, использование Arrays.asList() выглядит более аккуратно.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь