首页 > 解决方案 > 为什么我找不到迭代器的值?

问题描述

为什么这段代码不打印带有 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

标签: java

解决方案


每次您打电话时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);

推荐阅读