如果我有一个集合,如集合<String> strs,我怎么能得到第一项?我可以调用一个迭代器,取它的第一个next(),然后丢弃迭代器。有没有更少浪费的方法呢?
当前回答
这完全取决于你使用的是哪种实现,是arraylist linkedlist,还是set的其他实现。
如果它被设置了,那么你可以直接获得第一个元素,它们可以在集合上进行诡计循环,创建一个值为1的变量,当标志值为1时获得值,然后打破循环。
如果是列表的实现,那么通过定义索引号很容易。
其他回答
功能:
public static <T> Optional<T> findFirst(List<T> result) {
return Optional.ofNullable(result)
.map(List::stream)
.flatMap(Stream::findFirst);
}
上面的代码片段保留NullPointerException和IndexOutOfBoundsException
在java 8中:
Optional<String> firstElement = collection.stream().findFirst();
对于旧版本的java,在Guava Iterables中有一个getFirst方法:
Iterables.getFirst(iterable, defaultValue)
你可以这样做:
String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];
javadoc for Collection给出了如下数组元素的顺序:
如果该集合对其迭代器返回元素的顺序有任何保证,则该方法必须以相同的顺序返回元素。
你可以选角。例如,如果存在一个具有此定义的方法,并且您知道该方法将返回一个List:
Collection<String> getStrings();
调用它之后,你需要第一个元素,你可以这样做:
List<String> listString = (List) getStrings();
String firstElement = (listString.isEmpty() ? null : listString.get(0));
如果知道集合是队列,则可以将集合强制转换为队列并轻松获取它。
您可以使用几个结构来获得订单,但需要对其进行强制转换。
推荐文章
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”
- 使用String.split()和多个分隔符
- Java数组有最大大小吗?
- 在Android中将字符串转换为Uri
- 从JSON生成Java类?
- 为什么java.util.Set没有get(int index)?
- Swing和AWT的区别是什么?
- 为什么Java流是一次性的?
- 四舍五入BigDecimal *总是*有两位小数点后
- 设计模式:工厂vs工厂方法vs抽象工厂
- Java:检查enum是否包含给定的字符串?
- 它的意思是:序列化类没有声明一个静态的最终serialVersionUID字段?