Как проверить, существует ли элемент в наборе элементов?
В инструкции if
в Java, как я могу проверить, существует ли объект в наборе элементов. Например.
В этом сценарии мне нужно проверить, что плод будет яблоком, апельсином или бананом.
if (fruitname in ["APPLE", "ORANGES", "GRAPES"]) {
//Do something
}
Это очень тривиальная вещь, но я не мог понять короткий и лаконичный способ добиться этого.
Ответы
Ответ 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 ответ.)
Будьте осторожны с чувствительностью к регистру (оранжевый! = Оранжевый).