如果我有一个集合,如集合<String> strs,我怎么能得到第一项?我可以调用一个迭代器,取它的第一个next(),然后丢弃迭代器。有没有更少浪费的方法呢?
当前回答
没有这样的东西作为“第一”项目在一个集合,因为它是…嗯,只是一个集合。
从Java文档的Collection.iterator()方法:
没有关于元素返回顺序的保证。
所以你不能。
如果使用其他接口,如List,可以执行以下操作:
String first = strs.get(0);
但直接从一个集合这是不可能的。
其他回答
Iterables。get (indexYouWant yourC)
因为实际上,如果你使用集合,你应该使用谷歌集合。
听起来你的Collection想要像list一样,所以我建议:
List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
在Java 8中,你有很多操作符可以使用,比如limit
/**
* Operator that limit the total number of items emitted through the pipeline
* Shall print
* [1]
* @throws InterruptedException
*/
@Test
public void limitStream() throws InterruptedException {
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 2, 3)
.stream()
.limit(1)
.collect(toList());
System.out.println(list);
}
在java 8中:
Optional<String> firstElement = collection.stream().findFirst();
对于旧版本的java,在Guava Iterables中有一个getFirst方法:
Iterables.getFirst(iterable, defaultValue)
功能:
public static <T> Optional<T> findFirst(List<T> result) {
return Optional.ofNullable(result)
.map(List::stream)
.flatMap(Stream::findFirst);
}
上面的代码片段保留NullPointerException和IndexOutOfBoundsException
推荐文章
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?
- 将Date对象转换为日历对象
- 在Java中保存最后N个元素的大小有限的队列