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

时间:2015-01-28 09:16:13

标签: java dictionary collections

我从另一个方法获取Map的实例

Map map = service.getMap();

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

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

还有其他办法吗?

3 个答案:

答案 0 :(得分:1)

显然你想要的是来自地图的10个任意元素。这将是一个简单的Java 8习惯用法:

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

答案 1 :(得分:1)

如果您只需要值,我会建议这样做:

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()

答案 2 :(得分:0)

您可以使用中间列表来保存键,然后从中选择随机元素。例如,此代码创建一个包含15个元素的Map,然后从中随机选择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);
}

这也有一个优点,就是它实际上选择了随机元素,而不是只返回前10个元素的其他解决方案,并且每次都会给你相同的10个元素。