【问题标题】:Get the first 5 elements of a Map in Java [closed]在Java中获取地图的前5个元素[关闭]
【发布时间】:2020-11-21 18:47:45
【问题描述】:

我正在为大学制作一个 Java 项目。我需要在 String 列表中添加 Map 的前 5 个值,但我似乎无法找到一种方法来迭代仅 5 个元素,而不是像使用 Iterator 那样的所有元素

基本上我有一个 Map 声明如下:Map<String, Integer> infl_numbers = new HashMap<>();

我想做这样的事情:

for (short i =0;i<5;i++){
    // element = get i-th element of the Map
    // list.add(element)
}

谁能帮帮我?

【问题讨论】:

  • HashMap 未排序 - 元素的排序顺序未明确定义。因此,您可能会在每次运行应用程序时获得不同的元素。
  • 定义 first 的含义,Map 的键由 Set 支持,根据合同没有定义顺序。
  • 还有其他类型的 Map 确实提供了排序,但请查看 LinkedHashMap,它可以提供插入顺序或访问顺序,具体取决于配置。
  • 由于不关心keys,所以可以直接遍历valuesinfl_numbers.values().stream().limit(5).collect(Collectors.toList())

标签: java hashmap linkedhashmap


【解决方案1】:

HashMap 是此要求的错误类。由于HashMap 中的元素没有排序,因此您每次可能会得到一组不同的五个元素。您应该使用维护插入顺序的LinkedHashMap。然后,您可以在计数器的帮助下迭代键集并获取前五个元素,例如

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new LinkedHashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);
        map.put("Four", 4);
        map.put("Five", 5);
        map.put("Six", 6);
        map.put("Seven", 7);
        map.put("Eight", 8);
        map.put("Nine", 9);
        map.put("Ten", 10);

        // Access first five elements
        int count = 0;
        Iterator<String> itr = map.keySet().iterator();
        while (itr.hasNext() && count < 5) {
            System.out.println(map.get(itr.next()));
            count++;
        }
    }
}

输出:

1
2
3
4
5

【讨论】:

  • 很好的解释,但缺少一个小细节:OP 要求提供Map&lt;String, Integer&gt;,您提供了相反的泛型类型Map&lt;Integer, String&gt;
  • 感谢@Glains 的支持和指出。我已经更新了Map 以反映它。
【解决方案2】:

您不能直接在地图上使用索引 (i = 0..4) 做任何事情,因为地图通常是无序的。与集合相同。所以你所能做的就是开始处理地图,获取你得到的任何物品,然后在你得到 5 个物品后停止:

int count = 0;
for (String key : infl_numbers.keySet()) {
    list.add(infl_numbers.get(key))
    count++;
    if (count == 5)
        break;
}

有一些类型的地图是有序的。因此,如果您引用其中之一而不仅仅是对 Map 的引用,那么情况就不同了,并且取决于您正在处理的 Map 的子类型。

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多