为什么我找不到迭代器的值?
为什么这段代码不打印带有 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);