Подтвердить что ты не робот

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

В инструкции if в Java, как я могу проверить, существует ли объект в наборе элементов. Например. В этом сценарии мне нужно проверить, что плод будет яблоком, апельсином или бананом.

if (fruitname in ["APPLE", "ORANGES", "GRAPES"]) {
    //Do something
}

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

4b9b3361

Ответ 1

static final List<String> fruits = Arrays.asList("APPLE", "ORANGES", "GRAPES");

if (fruits.contains(fruitname))

Если бы ваш список был намного больше, набор был бы более эффективным.

static final Set<String> fruits = new HashSet<String>(
       Arrays.asList("APPLE", "ORANGES", "GRAPES", /*many more*/));

Ответ 2

для полноты использования google-collections/guava:

import com.google.common.collect.Sets;

static final Set<String> fruit = Sets.newHashSet("APPLE", "ORANGES", "GRAPES");

if (fruit.contains(fruitname))

или используя старые классы jdk:

static final Set<String> fruit = new HashSet<String>(Arrays.asList("APPLE", "ORANGES", "GRAPES"));

Ответ 3

Является Arrays.binarySearch, что вы ищете?

String [] fruits = new String[]{"APPLE", "ORANGES", "GRAPES"};
Arrays.sort(fruits); // binarySearch requires that the array is sorted

if (Arrays.binarySearch(fruits), fruitname) >= 0) {
  // found!
}

И, конечно, доверенный Apache Commons ArrayUtils:

if (ArrayUtils.contains(new String[]{"APPLE", "ORANGES", "GRAPES"}, fruitname){
  // found
}

Я знал, что что-то будет в Apache Commons:)

Ответ 4

Если у вас есть Set, List, Map фруктов, которые имеют одного и того же родителя: Collection, вы можете попробовать этот пример.

String fruitName = "Orange";
Collection<String> fruits = ... // set of fruits
if (fruits.contains(fruitName)) {
    ...
}

(Для Java 8/9/10 способов создания буквенного Set пожалуйста, смотрите этот SO ответ.)

Будьте осторожны с чувствительностью к регистру (оранжевый! = Оранжевый).