Java中使用增强for循环获取LinkedHashMap下一键值对并配对的方法
解决方案
Java的增强for循环本身没有提供直接获取下一个元素的能力,你可以通过以下两种常用方案实现需求:
方案1:使用Iterator迭代集合(推荐,无需额外转存)
LinkedHashMap的entrySet()/keySet()/values()的迭代顺序和插入顺序完全一致,我们可以直接获取迭代器,每次读取两个元素完成配对:
public void modtagMomsAngivelse() { // 只需要值的话可以直接迭代values集合,代码更简洁 Iterator<String> valueIterator = dates.values().iterator(); while (valueIterator.hasNext()) { String startDate = valueIterator.next(); String endDate = valueIterator.next(); System.out.println(startDate + " | " + endDate); } }
如果业务需要用到键,也可以迭代entrySet():
public void modtagMomsAngivelse() { Iterator<Map.Entry<String, String>> iterator = dates.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> startEntry = iterator.next(); // 这里可以获取起始日期的键:startEntry.getKey() String startDate = startEntry.getValue(); Map.Entry<String, String> endEntry = iterator.next(); // 这里可以获取结束日期的键:endEntry.getKey() String endDate = endEntry.getValue(); System.out.println(startDate + " | " + endDate); } }
方案2:将值集合转为列表,按索引遍历
如果更习惯按索引访问,可以把values()转成ArrayList,以步长为2遍历索引即可:
public void modtagMomsAngivelse() { List<String> dateList = new ArrayList<>(dates.values()); for (int i = 0; i < dateList.size(); i += 2) { String startDate = dateList.get(i); String endDate = dateList.get(i + 1); System.out.println(startDate + " | " + endDate); } }
注意事项
两种方案都默认LinkedHashMap元素个数为偶数,如果存在业务场景下元素个数为奇数的情况,建议提前判断size() % 2 == 0,或者在取第二个元素前判断迭代器/索引是否合法,避免出现NoSuchElementException或者IndexOutOfBoundsException。
内容的提问来源于stack exchange,提问作者Buster3650
相关产品推荐
相关产品推荐

