java - 为什么我找不到迭代器的值?
问题描述
为什么这段代码不打印带有 a"q"
的值?
Iterator<String> it = ZoneId.getAvailableZoneIds().iterator();
while (it.hasNext()) {
if (it.next().contains("q"))
System.out.println(it.next());
}
输出:
Pacific/Kwajalein
Etc/GMT-3
America/Martinique
Pacific/Funafuti
Canada/Pacific
Eire
America/Sitka
Brazil/West
US/Aleutian
解决方案
每次您打电话时next()
,您都会阅读下一项,但在打印时您会next()
再次调用,因此您正在打印下一项带有 a 的项目q
。
Java 为这种情况提供了一种方便的语法;foreach循环:
for (String zoneId : ZoneId.getAvailableZoneIds()) {
if (zoneId.contains("q")) {
System.out.println(zoneId);
}
}
或者最近,流:
ZoneId.getAvailableZoneIds().stream()
.filter(zoneId -> zoneId.contains("q"))
.forEach(System.out::println);
推荐阅读
- python - Pillow 7.2.0 不支持 Python 3.9
- android - 如何制作在 BlueStacks 上运行时需要调整自动请求图形设置的 Android 应用
- c - 如何生成一个随机的 32 位二进制数并使用 C 对其进行操作/从中提取某些位?
- python - 如何用类和对象缩短此代码
- javascript - 如何检查具有选定属性但它们是不同类型的两个对象的相等性
- python - 在python中将列表转换为json文件中的字典
- javascript - 制作两个按钮,使 div 随机放置
- flutter - 如何在不将应用程序置于前台的情况下关闭本地通知
- youtube-data-api - 以我自己的身份以程序方式访问 YouTube?
- python - 我可以将 Selenium/Geckodriver 浏览器重新连接到新的驱动程序吗?