是否可以在没有循环的情况下获取未排序地图的子图?

Is it possible to get submap for unsorted map without loop?

我从另一个方法

得到了Map的实例
Map map = service.getMap();

现在我想从此地图中获取任意 10 个元素。

我知道我可以迭代 Map.Entry 但我不喜欢这个决定。

还有其他方法吗?

显然您想要的是地图中的 10 个 任意 个元素。这可以通过简单的 Java 8 习语获得:

set.entrySet().stream().limit(10).collect(toList());

如果您只需要值,我建议这样的方法:

Map map = service.getMap();
Object[] array= map.entrySet().toArray();
Arrays.copyOfRange(array, 0, 10);

或使用仿制药

Map<Key, Value> map = service.getMap();
Map.Entry<Key, Value>[] array = (Map.Entry<Key, Value>[]) map.entrySet().toArray(new Map.Entry[0]);
Arrays.copyOfRange(array, 0, 10);

Map.Entry有getKey()getValue()

您可以使用一个中间列表来保存键,然后您可以从中 select 随机元素。例如,此代码创建一个包含 15 个元素的 Map,然后从中随机创建 selects 10:

public static void main(String[] args) throws Exception {
    Map<Integer, String> map = new HashMap<>();
    for(int x = 0; x < 15; x++) {
        map.put(x, "val: " + String.valueOf(x));
    }

    List<Integer> keyList = new ArrayList<>(map.keySet());
    Map<Integer, String> randomMap = new HashMap();
    for(int x = 0; x < 10 && !keyList.isEmpty(); x++) {
        Integer key = keyList.remove(new Random().nextInt(keyList.size()));
        randomMap.put(key, map.get(key));
    }
    System.out.println(randomMap);
}

这还有一个优点,它实际上是 selecting 随机元素,而不是其他解决方案,后者只是 return 前 10 个元素,每次都会给你相同的 10 个。