如果我有一个集合,如集合<String> strs,我怎么能得到第一项?我可以调用一个迭代器,取它的第一个next(),然后丢弃迭代器。有没有更少浪费的方法呢?
当前回答
如果你在使用Apache Commons Collections 4,有一个IterableUtils。第一个方法。在列表的情况下,它包含了一个优化,使用起来很整洁。这和番石榴法很相似。代码看起来像
String firstStr = IterableUtils.first(strs);
其他回答
这完全取决于你使用的是哪种实现,是arraylist linkedlist,还是set的其他实现。
如果它被设置了,那么你可以直接获得第一个元素,它们可以在集合上进行诡计循环,创建一个值为1的变量,当标志值为1时获得值,然后打破循环。
如果是列表的实现,那么通过定义索引号很容易。
没有这样的东西作为“第一”项目在一个集合,因为它是…嗯,只是一个集合。
从Java文档的Collection.iterator()方法:
没有关于元素返回顺序的保证。
所以你不能。
如果使用其他接口,如List,可以执行以下操作:
String first = strs.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);
}
你可以这样做:
String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];
javadoc for Collection给出了如下数组元素的顺序:
如果该集合对其迭代器返回元素的顺序有任何保证,则该方法必须以相同的顺序返回元素。
如果你在使用Apache Commons Collections 4,有一个IterableUtils。第一个方法。在列表的情况下,它包含了一个优化,使用起来很整洁。这和番石榴法很相似。代码看起来像
String firstStr = IterableUtils.first(strs);
推荐文章
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- Java:路径vs文件
- ExecutorService,如何等待所有任务完成
- Maven依赖Servlet 3.0 API?
- 如何在IntelliJ IDEA中添加目录到应用程序运行概要文件中的类路径?
- getter和setter是糟糕的设计吗?相互矛盾的建议
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?
- Intellij IDEA上的System.out.println()快捷方式
- 使用Spring RestTemplate获取JSON对象列表
- Spring JPA选择特定的列
- URLEncoder不能翻译空格字符
- Java中的super()
- 如何转换JSON字符串映射<字符串,字符串>与杰克逊JSON