Java: Get first item from a collection
Looks like that is the best way to do it:
String first = strs.iterator().next();
Great question... At first, it seems like an oversight for the Collection
interface.
Note that "first" won't always return the first thing you put in the collection, and may only make sense for ordered collections. Maybe that is why there isn't a get(item)
call, since the order isn't necessarily preserved.
While it might seem a bit wasteful, it might not be as bad as you think. The Iterator
really just contains indexing information into the collection, not a usually a copy of the entire collection. Invoking this method does instantiate the Iterator
object, but that is really the only overhead (not like copying all the elements).
For example, looking at the type returned by the ArrayList<String>.iterator()
method, we see that it is ArrayList::Itr
. This is an internal class that just accesses the elements of the list directly, rather than copying them.
Just be sure you check the return of iterator()
since it may be empty or null
depending on the implementation.
Iterables.get(yourC, indexYouWant)
Because really, if you're using Collections, you should be using Google Collections.
In java 8:
Optional<String> firstElement = collection.stream().findFirst();
For older versions of java, there is a getFirst method in Guava Iterables:
Iterables.getFirst(iterable, defaultValue)
There is no such a thing as "first" item in a Collection
because it is .. well simply a collection.
From the Java doc's Collection.iterator() method:
There are no guarantees concerning the order in which the elements are returned...
So you can't.
If you use another interface such as List, you can do the following:
String first = strs.get(0);
But directly from a Collection this is not possible.