有可能在Java中结合两次迭代吗?

时间:2015-05-18 19:26:56

标签: java for-loop iterator hashmap

在Java中使用像这样的迭代器是合法的吗?

for(int key : someMap.KeySet() && double value : someMap.values()) {
    //do something
}

这不是我能在其他任何地方找到的东西。我将自己测试一下,但是如果有人能省下我的努力并且知道这一点,我将非常感激。

3 个答案:

答案 0 :(得分:0)

不,foreach循环不会在Java中以这种方式工作。为什么必须循环使用for(Integer key : someMap.keySet()) { Double value = someMap.get(key); //do something } 值?您可以直接获取给定键的值:

Map

甚至更好,迭代Set条目for(Map.Entry<Integer, Double> entry : someMap.entrySet()) { Integer key = entry.getKey(); Double value = entry.getValue(); //do something }

Iterator<Integer> keyIterator = someMap.keySet().iterator();
Iterator<Double> valueIterator = someMap.values().iterator();

while(keyIterator.hasNext() && valueIterator.hasNext()) {
    Integer key = keyIterator.getNext();
    Double value = valueIterator.getNext();

    \\ do stuff
}

或者,如果你真的想要迭代两者,你可以手动使用迭代器:

xcodebuild -scheme "Tests"      \
           -configuration Debug \
           -destination "platform=iOS Simulator,name=iPhone 6"

答案 1 :(得分:0)

您需要遍历someMap.entrySet()以实现您在问题中草拟的内容。这样,您就可以在一次迭代中访问每个条目的键和值(包含在Map.Entry<Integer, Double>对象中)。

答案 2 :(得分:0)

您几乎肯定希望迭代entrySet()的{​​{1}},如此

Map

但是对于它的价值,在Java 8中你可以做到

for(Map.Entry<Integer, Double> entry : map.entrySet()) {
   int key = entry.getKey();
   double value = entry.getValue();
   // do whatever with key, value
}