Java: Get first item from a collection

Viewed 460125

If I have a collection, such as Collection<String> strs, how can I get the first item out? I could just call an Iterator, take its first next(), then throw the Iterator away. Is there a less wasteful way to do it?

14 Answers

Functional way:

public static <T> Optional<T> findFirst(List<T> result) {
    return Optional.ofNullable(result)
            .map(List::stream)
            .flatMap(Stream::findFirst);
}

above code snippet preserve from NullPointerException and IndexOutOfBoundsException

Guava provides an onlyElement Collector, but only use it if you expect the collection to have exactly one element.

Collection<String> stringCollection = ...;
String string = collection.stream().collect(MoreCollectors.onlyElement())

If you are unsure of how many elements there are, use findFirst.

Optional<String> optionalString = collection.stream().findFirst();

If you are using Apache Commons Collections 4 there is an IterableUtils.first method. It contains an optimization in the case of Lists and is neat to use. It's very similar to the Guava method. The code would look like

String firstStr = IterableUtils.first(strs);

I used this:

strs.isEmpty() ? "" : strs.iterator().next();

Related