2011-01-14 15 views
21

In un'istruzione if in Java, come è possibile verificare se un oggetto esiste in un set di elementi. Per esempio. In questo scenario ho bisogno di convalidare che il frutto sarà una mela, arancia o banana.Come posso verificare se un elemento esiste in un insieme di elementi?

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

È una cosa molto banale ma non sono riuscito a capire un modo breve e conciso per realizzare questo.

risposta

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

if (fruit.contains(fruitname)) 

Se la tua lista era molto più grande, un set sarebbe più efficiente.

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

potrebbe anche fare un 'set'. Sembra più appropriato. – wds

+0

@wds In realtà non esiste un metodo Arrays.asSet e, se questo è l'unico utilizzo per la raccolta, la conversione aggiuntiva (per impostare) non sembra valsa la pena. – extraneon

+0

Non per una lista con tre voci. Per più voci potrebbe valerne la pena. –

2

Is Arrays.binarySearch Cosa stai cercando?

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

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

E naturalmente il fidati Apache Commons ArrayUtils:

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

Sapevo che ci sarebbe stato qualcosa in Apache Commons :)

+3

la ricerca binaria presuppone che l'array sia ordinato, ricordo O che viene dopo G;) –

+0

Ho notato :) Quindi ho aggiunto un ordinamento. Mi piace comunque la tua soluzione (è l'upvote :) – extraneon

+0

@peter: c'è un Array.sort() lì dentro); – fasseg

6

per completezza usando google-collezioni/guava:

import com.google.common.collect.Sets; 

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

if (fruit.contains(fruitname)) 

o utilizzando le classi old jdk del piano:

0

Se si dispone di Set, Elenco, Mappa di frutti che hanno tutti lo stesso padre: Raccolta, puoi provare questo esempio.

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

Ma è necessario prestare attenzione a maiuscole e minuscole (arancione! = Arancione)

Problemi correlati