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

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

 Collection c; Iterator iter = c.iterator(); Object first = iter.next(); 

(这是最接近Set的“first”元素,你应该认识到它对Set大部分实现绝对没有意义,这对LinkedHashSet和TreeSet有意义,但对HashSet没有意义。

看到j​​avadoc

列表

 list.get(0); 

或设置

 set.iterator().next(); 

并通过调用isEmpty()来检查使用上述方法之前的大小

 !list_or_set.isEmpty() 

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

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

(如果设置/列表可能为空,则有用。)

我很惊讶没有人提出番石榴解决scheme:

 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) 

这不是这个问题的确切答案,但是在对象应该sorting的情况下SortedSet有一个first()方法:

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

sorting的对象必须实现Comparable接口(就像String一样)

 set.toArray()[0]; 

名单

 list.get(0); 

您可以使用get(index)方法来访问列表中的元素。

根据定义,集合只包含元素而没有特定的顺序。 因此,没有可以获得的“第一个”元素,但可以使用iterator(使用for each循环)遍历它,或者使用toArray()方法将其转换为数组。

java8和进一步

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

这将帮助您检索列表或设置的第一个元素。 假设set或者list不是空的( 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(); } 

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

希望这可以帮助。

一个不太好的解决scheme甚至可以

 T first = null; //or "empty" placeholder for(T elem: mySet /* or myList */){ first = elem; break; } if (first != null) { //Do something }