我想知道我是否能得到一个列表或集合的第一个元素。使用哪种方法?
当前回答
让我们假设您有一个List<String>字符串,您想从中获取第一项。
有几种方法可以做到:
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块中。
科特林:
在Kotlin中,数组和大多数集合(例如:List)都有第一个方法调用。 你的代码应该是这样的
有关名单:
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()
后面跟着或封装在适当的检查或try-catch块中。
Kotlin还为Kotlin提供了更安全的方法。例如,当使用JRE8时,firstOrNull或getOrElse或getOrDefault
其他回答
请看javadoc
的列表
list.get(0);
或一组
set.iterator().next();
并在使用上述方法之前通过调用isEmpty()检查大小
!list_or_set.isEmpty()
我很惊讶没有人提出番石榴解决方案:
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)
Set
set.toArray()[0];
List
list.get(0);
在Java >=8中,你也可以使用流式API:
Optional<String> first = set.stream().findFirst();
(如果Set/List可能为空,则有用。)
Collection c;
Iterator iter = c.iterator();
Object first = iter.next();
(这是最接近Set的“第一个”元素。您应该意识到,对于Set的大多数实现来说,它绝对没有任何意义。这可能对LinkedHashSet和TreeSet有意义,但对HashSet没有意义。)
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 为什么元组可以包含可变项?
- 在Jar文件中运行类
- 带参数的可运行?
- 如何检查IEnumerable是否为空或空?
- 不区分大小写的“in”
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作