【发布时间】:2011-06-09 00:40:11
【问题描述】:
在 Java 中的 if 语句中,我如何检查对象是否存在于一组项目中。例如。
在这种情况下,我需要验证水果是苹果、橙子还是香蕉。
if (fruitname in ["APPLE", "ORANGES", "GRAPES"]) {
//Do something
}
这是一件非常微不足道的事情,但我想不出一个简洁的方法来完成它。
【问题讨论】:
标签: java collections
在 Java 中的 if 语句中,我如何检查对象是否存在于一组项目中。例如。
在这种情况下,我需要验证水果是苹果、橙子还是香蕉。
if (fruitname in ["APPLE", "ORANGES", "GRAPES"]) {
//Do something
}
这是一件非常微不足道的事情,但我想不出一个简洁的方法来完成它。
【问题讨论】:
标签: java collections
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*/));
【讨论】:
Set。似乎更合适。
Set 仍然是适合该工作的类型,即使特定的实现可能不是。
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 中会有一些东西 :)
【讨论】:
Arrays.sort 是一个 void 方法,所以这并不能真正编译。
为了完整性,使用 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"));
【讨论】:
如果您有Set、List、Map 的水果都具有相同的父母:Collection,您可以试试这个例子。
String fruitName = "Orange";
Collection<String> fruits = ... // set of fruits
if (fruits.contains(fruitName)) {
...
}
(对于 Java 8/9/10 创建文字 Set 的方法,请参阅 this SO answer。)
注意区分大小写(橙色!= 橙色)。
【讨论】: