2011-01-14 14 views
21

W instrukcji if w języku Java można sprawdzić, czy obiekt istnieje w zestawie elementów. Na przykład. W tym scenariuszu muszę potwierdzić, że owocem będzie jabłko, pomarańcza lub banan.Jak mogę sprawdzić, czy element istnieje w zestawie elementów?

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

To bardzo trywialna sprawa, ale nie mogłem wymyślić krótkiego i zwięzłego sposobu, aby to osiągnąć.

Odpowiedz

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

if (fruit.contains(fruitname)) 

Jeśli twoja lista byłaby znacznie większa, zestaw byłby bardziej wydajny.

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

Równie dobrze może zrobić to 'Set'. Wydaje się bardziej odpowiednie. – wds

+0

@wds Nie istnieje tak naprawdę metoda Arrays.asSet, a jeśli jest to jedyne zastosowanie w tej kolekcji, dodatkowy etap konwersji (do ustawienia) nie wydaje się wart wysiłku. – extraneon

+0

Nie dla listy z trzema wpisami. Aby uzyskać więcej wpisów, może warto. –

2

Czy jest to Arrays.binarySearch czego szukasz?

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

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

I oczywiście zaufanym Apache Commons ArrayUtils:

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

Wiedziałem, że będzie coś w Apache Commons :)

+3

wyszukiwanie binarne zakłada, że ​​tablica jest posortowana, pamiętam, że przychodzę po G;) –

+0

Zauważyłem :) Więc dodałem sort. Jednak podoba mi się twoje rozwiązanie (to jest wersja :) – extraneon

+0

@peter: tam jest Array.sort();) – fasseg

6

kompletności używając google-kolekcje/guawa:

import com.google.common.collect.Sets; 

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

if (fruit.contains(fruitname)) 

lub przy użyciu samolotu stare klasy jdk:

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

Jeśli masz Set, List, Map of fruits, które mają tego samego rodzica: Collection, możesz spróbować tego przykładu.

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

Ale trzeba zwrócić uwagę na wielkość liter (= pomarańczowy!)

Powiązane problemy