如何获取List或Set的第一个元素?

时间:2012-01-16 15:37:49

标签: java list collections set

我想知道我是否可以获得列表或集合的第一个元素。使用哪种方法?

9 个答案:

答案 0 :(得分:261)

参见javadoc

List

list.get(0);

Set

set.iterator().next();

并在调用isEmpty()

之前检查大小,然后再使用上述方法
!list_or_set.isEmpty()

答案 1 :(得分:230)

Collection c;

Iterator iter = c.iterator();

Object first = iter.next();

(这是你最接近Set的“第一”元素。你应该意识到它对Set的大多数实现都没有任何意义。这可能有意义对于LinkedHashSet和TreeSet,但不适用于HashSet。)

答案 2 :(得分:100)

在Java> = 8中,您还可以使用Streaming API:

Optional<String> first = set.stream().findFirst();

(如果Set / List可能为空,则很有用。)

答案 3 :(得分:20)

假设你有一个List<String> strings,你想要第一个项目。

有几种方法可以做到这一点:

Java(8之前版):

String firstElement = null;
if (!strings.isEmpty() && strings.size() > 0) {
    firstElement = strings.get(0);
}

Java 8:

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

<强>番石榴

String firstElement = Iterables.getFirst(strings, null);

Apache commons(4 +)

String firstElement = (String) IteratorUtils.get(strings, 0);

Apache commons(4之前)

String firstElement = (String) CollectionUtils.get(strings, 0);

在适当的检查或try-catch块之后进行或封装。

<强>科特林:

在Kotlin中,Arrays和大多数Collections(例如:List)都有first方法调用。 所以你的代码看起来像这样

列表:

val stringsList: List<String?> = listOf("a", "b", null)
val first: String? = stringsList.first()

表示数组:

val stringArray: Array<String?> = arrayOf("a", "b", null)
val first: String? = stringArray.first()

答案 4 :(得分:19)

我很惊讶没有人建议番石榴溶液了:

com.google.common.collect.Iterables.get(collection, 0)
// or
com.google.common.collect.Iterables.get(collection, 0, defaultValue)
// or
com.google.common.collect.Iterables.getFirst(collection, defaultValue)

或者如果您期望单个元素:

com.google.common.collect.Iterables.getOnlyElement(collection, defaultValue)
// or
com.google.common.collect.Iterables.getOnlyElement(collection)

答案 5 :(得分:9)

set.toArray()[0];

列表

list.get(0);

答案 6 :(得分:6)

这不是这个问题的确切答案,但是如果对象应该排序,SortedSet有一个first()方法:

SortedSet<String> sortedSet = new TreeSet<String>();
sortedSet.add("2");
sortedSet.add("1");
sortedSet.add("3");
String first = sortedSet.first(); //first="1"

已排序的对象必须实现Comparable接口(如String所做的)

答案 7 :(得分:6)

以及

Set<String> set = new TreeSet<>();
    set.add("2");
    set.add("1");
    set.add("3");
    String first = set.stream().findFirst().get();

这将帮助您检索列表或集的第一个元素。 假设集合或列表不为空(get()空可选将抛出java.util.NoSuchElementException

orElse()可用作:(这只是一种解决方法 - 不推荐使用)

String first = set.stream().findFirst().orElse("");
set.removeIf(String::isEmpty);

以下是适当的方法:

Optional<String> firstString = set.stream().findFirst();
if(firstString.isPresent()){
    String first = firstString.get();
}

同样可以检索列表的第一个元素。

希望这有帮助。

答案 8 :(得分:2)

您可以使用get(index)方法从List访问元素。

根据定义,设置只包含元素,没有特定的顺序。因此,没有“first”元素可以获得,但可以使用迭代器(使用for each循环)迭代它或使用toArray()方法将其转换为数组。