为什么这段代码不打印包含"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发布于 2021-02-14 04:36:54
每次调用next()都会读取下一项,但在打印时会再次调用next(),所以打印的下一项中包含一个q。
Java为这种情况提供了一种方便的语法;foreach循环
for (String zoneId : ZoneId.getAvailableZoneIds()) {
if (zoneId.contains("q")) {
System.out.println(zoneId);
}
}或者最近,streams:
ZoneId.getAvailableZoneIds().stream()
.filter(zoneId -> zoneId.contains("q"))
.forEach(System.out::println);发布于 2021-02-14 04:34:13
因为您遍历了其中包含'q'的条目。第一个it.next()移动迭代器并返回对象。然后在if中再次移动迭代器,打印包含'q'的元素后一个元素。
发布于 2021-02-14 04:45:18
这是因为您调用next()两次。每次执行此操作时,都会从Iterator中读取下一个值。看看这个:
Iterator<String> it = ZoneId.getAvailableZoneIds().iterator();
while (it.hasNext()) {
String zoneId = it.next();
if (zoneId.contains("q"))
System.out.println(zoneId);
}您可以使用更具可读性的语法对for loop执行同样的操作
for (String zoneId : ZoneId.getAvailableZoneIds())
if (zoneId.contains("q"))
System.out.println(zoneId);或者,可能使用Stream
ZoneId.getAvailableZoneIds().stream()
.filter(zoneId -> zoneId.contains("q"))
.forEach(System.out::println); 所有代码片段的结果都是相同的。
https://stackoverflow.com/questions/66189617
复制相似问题