Есть ли у 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, но они будут различаться в зависимости от ваших данных и т.д.