如何获得List或Set的第一个元素?
我想知道是否可以得到列表或集合的第一个元素。 使用哪种方法?
Collection c; Iterator iter = c.iterator(); Object first = iter.next();
(这是最接近Set
的“first”元素,你应该认识到它对Set
大部分实现绝对没有意义,这对LinkedHashSet和TreeSet有意义,但对HashSet没有意义。
看到javadoc
列表
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 }