如果我有一个集合,如集合<String> strs,我怎么能得到第一项?我可以调用一个迭代器,取它的第一个next(),然后丢弃迭代器。有没有更少浪费的方法呢?


当前回答

听起来你的Collection想要像list一样,所以我建议:

List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);

其他回答

你可以这样做:

String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];

javadoc for Collection给出了如下数组元素的顺序:

如果该集合对其迭代器返回元素的顺序有任何保证,则该方法必须以相同的顺序返回元素。

在java 8中:

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

对于旧版本的java,在Guava Iterables中有一个getFirst方法:

Iterables.getFirst(iterable, defaultValue)

如果知道集合是队列,则可以将集合强制转换为队列并轻松获取它。

您可以使用几个结构来获得订单,但需要对其进行强制转换。

如果你在使用Apache Commons Collections 4,有一个IterableUtils。第一个方法。在列表的情况下,它包含了一个优化,使用起来很整洁。这和番石榴法很相似。代码看起来像

String firstStr = IterableUtils.first(strs);

功能:

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

上面的代码片段保留NullPointerException和IndexOutOfBoundsException