如果我有一个集合,如集合<String> strs,我怎么能得到第一项?我可以调用一个迭代器,取它的第一个next(),然后丢弃迭代器。有没有更少浪费的方法呢?
当前回答
如果知道集合是队列,则可以将集合强制转换为队列并轻松获取它。
您可以使用几个结构来获得订单,但需要对其进行强制转换。
其他回答
听起来你的Collection想要像list一样,所以我建议:
List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
Guava提供了一个onlyElement Collector,但只有在希望集合只有一个元素时才使用它。
Collection<String> stringCollection = ...;
String string = collection.stream().collect(MoreCollectors.onlyElement())
如果不确定有多少元素,请使用findFirst。
Optional<String> optionalString = collection.stream().findFirst();
没有这样的东西作为“第一”项目在一个集合,因为它是…嗯,只是一个集合。
从Java文档的Collection.iterator()方法:
没有关于元素返回顺序的保证。
所以你不能。
如果使用其他接口,如List,可以执行以下操作:
String first = strs.get(0);
但直接从一个集合这是不可能的。
在java 8中:
Optional<String> firstElement = collection.stream().findFirst();
对于旧版本的java,在Guava Iterables中有一个getFirst方法:
Iterables.getFirst(iterable, defaultValue)
如果知道集合是队列,则可以将集合强制转换为队列并轻松获取它。
您可以使用几个结构来获得订单,但需要对其进行强制转换。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 如何检查IEnumerable是否为空或空?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder