2011-01-14 134 views
21

在Java中的if聲明中,我如何檢查一組項目中是否存在對象。例如。 在這種情況下,我需要驗證水果將是一個蘋果,橙子或香蕉。如何檢查一組項目中是否存在元素?

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

這是一件很平凡的事情,但我找不出一個簡短而簡明的方法來實現這一點。

回答

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

if (fruit.contains(fruitname)) 

如果您的清單要大得多,一套更有效。

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

還不如讓它`Set`。似乎更合適。 – wds 2011-01-14 08:53:33

+0

@wds實際上並沒有Arrays.asSet方法,如果這是該集合的唯一用途,額外的轉換(到Set)步驟似乎不值得付出努力。 – extraneon 2011-01-14 10:02:52

2

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的百科全書:)

使用谷歌的集合的完整性
6

/番石榴:

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")); 
0

如果您的Set,List,Map中的水果都具有相同的父級:Collection,那麼可以試試這個例子。

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

但你一定要在區分大小寫的關注(橙色!=橙色)

相關問題