2011-01-14 19 views
21

In einer if-Anweisung in Java, wie kann ich überprüfen, ob ein Objekt in einer Reihe von Elementen vorhanden ist. Z.B. In diesem Szenario muss ich bestätigen, dass die Frucht ein Apfel, Orange oder Banane sein wird.Wie kann ich überprüfen, ob ein Element in einem Satz von Elementen vorhanden ist?

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

Es ist eine sehr triviale Sache, aber ich konnte nicht einen kurzen und prägnanten Weg finden, dies zu erreichen.

Antwort

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

if (fruit.contains(fruitname)) 

Wenn Ihre Liste viel größer wäre, wäre ein Satz effizienter.

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

Es könnte aber auch machen es zu einem 'Set'. Scheint passender. – wds

+0

@wds Es gibt nicht wirklich eine Arrays.asSet-Methode, und wenn dies die einzige Verwendung für die Sammlung ist, würde der zusätzliche Konvertierungsschritt (zu Set) den Aufwand nicht wert sein. – extraneon

+0

Nicht für eine Liste mit drei Einträgen. Für mehr Einträge könnte es sich lohnen. –

2

Ist Arrays.binarySearch nach was Sie suchen?

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

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

Und natürlich Apache Commons ArrayUtils vertraut:

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

ich wusste, dass es etwas in Apache Commons sein :)

+3

binäre Suche geht davon aus, dass das Array sortiert ist, ich erinnere mich, O nach G kommen;) –

+0

Ich bemerkte :) So fügte ich eine Sortierung hinzu. Ich mag deine Lösung aber besser (das ist der upvote :) – extraneon

+0

@peter: da ist ein Array.sort() drin;) – fasseg

6

für Vollständigkeit mit Google-Sammlungen/Guave:

import com.google.common.collect.Sets; 

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

if (fruit.contains(fruitname)) 

oder mit dem Flugzeug alte jdk Klassen:

0

Wenn Sie Set, Liste, Karte von Früchten, die alle die gleiche Eltern haben: Sammlung, können Sie dieses Beispiel versuchen.

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

Aber Sie müssen sensible Aufmerksamkeit auf Fall zahlen (orange! = Orange)

Verwandte Themen