我想知道我是否能得到一个列表或集合的第一个元素。使用哪种方法?
Collection c; Iterator iter = c.iterator(); Object first = iter.next();
(这是最接近Set的“第一个”元素。你应该意识到,对于Set的大多数实现来说,它是绝对没有意义的。这可能对LinkedHashSet和TreeSet有意义,但对HashSet没有意义。)
Set
可以使用get(index)方法访问List中的元素。
根据定义,集合只是包含元素,没有特定的顺序。因此,您无法获得“first”元素,但可以使用迭代器(使用for每个循环)遍历它,或使用toArray()方法将其转换为数组。
请看javadoc
的列表
list.get(0);
或集
set.iterator().next();
并在使用上述方法之前通过调用isEmpty()检查大小
isEmpty()
!list_or_set.isEmpty()
这不是这个问题的确切答案,但如果对象应该排序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那样)
在Java >=8中,你也可以使用流式API:
Optional<String> first = set.stream().findFirst();
(如果Set/List可能为空,则有用。)
集
set.toArray()[0];
列表
我很惊讶没有人提出番石榴解决方案:
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)
java8和进一步
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()可以用作:(这只是一个变通方法-不推荐)
orElse()
String first = set.stream().findFirst().orElse(""); set.removeIf(String::isEmpty);
下面是适当的方法:
Optional<String> firstString = set.stream().findFirst(); if(firstString.isPresent()){ String first = firstString.get(); }
类似地,可以检索列表的第一个元素
希望这能有所帮助。
让我们假设你有一个List<String> strings,你想从它得到第一项。
List<String> strings
有几种方法可以做到:
Java (pre-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块中。
芬兰湾的科特林:
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()
Kotlin还为kotlin.collections提供了更安全的方法,例如firstOrNull或getOrElse,或使用JRE8时的getOrDefault
kotlin.collections
JRE8