如何跳过每个循环中的第一次迭代?

4 java loops hashmap

编程对我来说是新的,我试图了解一些概念.我正在尝试制作一个简单的小程序,在地图上显示欧洲的首都城市,并使用drawLine方法将它们连接起来.我遇到了一个问题,我无法成功加入两个省会城市.我想我理解为什么,但我想不出办法绕过它.draw方法中的后两个参数与前两个参数相同,但我无法跳过第一次迭代.这对我来说是全新的,我正试图从书本和网络中学习.

public void paint(Graphics g)
{
    super.paint(g);
    g.drawImage(image, 0, 0, this);

    for (Entry<String, co> entry : map.entrySet()) 
    {
        g.setColor(Color.BLUE);
        g.fillOval(entry.getValue().a, entry.getValue().b, 5, 5);

        g.setColor(Color.BLUE);
        g.drawString(entry.getKey(), entry.getValue().a+7, entry.getValue().b+7);     

        g.setColor(Color.RED);
        g.drawLine(entry.getValue().a, entry.getValue().b, 0, 0);//Problem
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以把我推向正确的方向吗?我正在考虑使用迭代器而不是每个循环使用迭代器,这是我目前唯一的想法.

ass*_*ias 7

您可以:

  • 使用经典循环
  • 使用布尔值来知道一次迭代是否是第一次
  • 用java 8使用流并跳过1

例如:

map.entrySet().skip(1).forEach(...);
Run Code Online (Sandbox Code Playgroud)


The*_*kis 7

可能不优雅,但它会工作,不会有任何明显的性能影响:

boolean isFirst = true;
for(...) {
    if(!isFirst) {
        // your code
    } else {
        isFirst = false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Bor*_*der 6

最好使用Iterator

final Map<String, String> map = new HashMap<>();
final Iterator<Entry<String, String>> iter = map.entrySet().iterator();
if (!iter.hasNext()) {
    //map is empty - handle
}
iter.next();
while (iter.hasNext()) {
    final Entry<String, String> e = iter.next();
    //your code
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢它而不是这种boolean方法,因为您不需要在每次迭代中检查标志。这种方法还提供了在每次迭代中消耗多个条目的自由度,只要您hasNext()在消耗每个附加项目之前重新检查即可。

聚苯乙烯

请遵守Java 命名约定。你的class co应该在PascalCase. 也Co可能不是最好的名称class- 尝试为从类到变量的所有内容选择有意义的名称。