Есть ли у Java оператор "IN" или функция, подобная SQL?

Я хочу знать, есть ли способ сделать что-то подобное в Java:

if(word in stringArray) {
  ...
}

Я знаю, что могу сделать функцию для этого, но я просто хочу знать, есть ли у Java что-то для этого.

Спасибо!

Ответы

Ответ 1

Есть много коллекций, которые позволят вам сделать что-то похожее на это. Например:

С Strings:

String s = "I can has cheezeburger?";
boolean hasCheese = s.contains("cheeze");

или Collections:

List<String> listOfStrings = new ArrayList<String>();
boolean hasString = listOfStrings.contains(something);

Однако аналогичной конструкции для простого String[] нет.

Ответ 2

Язык Java разработан как мощный, но простой. В Java нет такого оператора на уровне языка, но, конечно, библиотеки были созданы для облегчения таких запросов.

Если вы хотите знать, является ли какой-либо объект членом некоторого набора объектов, то вместо массива вы должны использовать - что еще? - a Set. Эти структуры данных, естественно, позволяют такие запросы, и еще лучше, они оптимизированы для таких запросов.

Вы можете легко проверить, соответствует ли данная строка в Set<String> следующим образом:

    String[] arr = { "Alice", "Bob", "Carol" };
    Set<String> names = new HashSet<String>(Arrays.asList(arr));

    System.out.println(names.contains("Alice")); // true
    System.out.println(names.contains("Dean")); // false

Использование HashSet, contains - операция с постоянным временем. Это намного лучше, чем линейный поиск через массив.

Вам следует ознакомиться с тем, какие структуры данных становятся доступными для вас в Java Collections Framework. Они позволяют вам писать коды, которые являются идиоматическими, поддерживаемыми, гибкими и поддерживаются многими мощными алгоритмами, доступными для этих структур данных.

См. также

Ответ 3

В SQL

x in ('Alice', 'Bob', 'Carol')

В Java:

Arrays.asList("Alice", "Bob", "Carol").contains(x)

Ответ 4

Java не имеет оператора "in".

Для массивов вам необходимо выполнить итерацию их и найти подходящий элемент.

Для списков вы можете использовать метод contains.

Ответ 5

Вы можете использовать java.util.Collection.contains() для коллекций. Если у вас есть ненулевой массив, вы можете использовать java.util.Arrays.asList(массив).contains().

Ответ 6

tabs[j].indexOf("lelamondeestgrand...")!=0

Ответ 7

if(myArrayList.contains("hello"))
{
    // yay
}

Ответ 8

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

Самое общее решение, которое поймает все это, состоит в следующем:

for(String s : stringArray)
{
  if(s.indexOf(word) > 0) return true;
}
return false;

Это смотрит на каждую строку в массиве и проверяет, содержится ли это слово в любом месте. Он вернет true после того, как будет найдено первое событие.

Ответ 9

Без массивов:

public static <T> boolean in(T value, T... list) {
    for (T item : list) {
        if (value.equals(item))
            return true;
    }
    return false;
}

использование:

int val = 1;
assert in(val, 1,2,3,4);

Ответ 10

Если массив отсортирован, вы можете использовать Arrays.binarySearch, чтобы найти данные.

Вот так:

   if (Arrays.binarySearch(stringArray, word)>=0)  {
     // word found in the array.
   }

Если массив несортирован, commons lang имеет метод ArrayUtils.indexOf.

Наконец, если вы ищете большой массив, то параллельный поиск может быть полезен с помощью ParallelArray, из JSR166 - в Java SE 7 и теперь доступен для загрузки. Эта статья дает введение.

Ответ 11

дайте нам более подробную информацию о том, как выглядит ваша проблема, и что вам нужно проверить. Существует несколько способов сделать такие вещи. Если вам нужно продолжать спрашивать, установлен ли элемент A в наборе B.. make set B a HashSet, и вы можете вызвать очень быстро, Вы можете получить тот же эффект несколькими способами java-ish, но они будут различаться в зависимости от ваших данных и т.д.