我想知道我是否可以获得列表或集合的第一个元素。使用哪种方法?
答案 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)
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()
可用作:(这只是一种解决方法 - 不推荐使用)
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()方法将其转换为数组。