50

In an if statement in Java how can I check whether an object exists in a set of items. E.g. In this scenario i need to validate that the fruit will be an apple, orange or banana.

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

It's a very trivial thing but I couldn't figure out a short and concise way to accomplish this.

4 Answers 4

73
static final List<String> fruits = Arrays.asList("APPLE", "ORANGES", "GRAPES"); if (fruits.contains(fruitname)) 

If your list was much larger, a set would be more efficient.

static final Set<String> fruits = new HashSet<String>( Arrays.asList("APPLE", "ORANGES", "GRAPES", /*many more*/)); 
Sign up to request clarification or add additional context in comments.

7 Comments

Might as well make it a Set. Seems more appropriate.
@wds There isn't really an Arrays.asSet method, and if this is the only use for the collection the extra conversion (to Set) step wouldn't seem worth the effort.
Not for a list with three entries. For more entries it might be worth it.
I'm guessing having to hash the key actually takes longer than doing a lookup in a table of a few dozen elements. Still, Set is the right type for the job, even if the particular implementation might not be.
@wds, true, for a small number of entries, it hardly matters which is faster. You can scan a List of 100K entries in about a milli-second which might be fast enough.
|
11

for completeness using google-collections/guava:

import com.google.common.collect.Sets; static final Set<String> fruit = Sets.newHashSet("APPLE", "ORANGES", "GRAPES"); if (fruit.contains(fruitname)) 

or using the plane old jdk classes:

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

Comments

2

Is Arrays.binarySearch what you are looking for?

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

And of course the trusted Apache Commons ArrayUtils:

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

I knew there would be something in Apache Commons :)

5 Comments

binary search assumes the array is sorted, I remember O coming after G ;)
I noticed :) So I added a sort. I like your solution better though (that's the upvote:)
@peter: there's an Array.sort() in there ;)
k thx for the info! sorry peter I upvoted your comment then ;)
Arrays.sort is a void method, so this doesn't really compile.
1

If you have Set, List, Map of fruits which all have the same parent: Collection, you can try this example.

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

(For Java 8/9/10 ways of creating literal Set please see this SO answer.)

Be careful with case sensitivity (Orange != orange).

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.