我从另一个方法获取Map
的实例
Map map = service.getMap();
现在我想从这张地图中获取任意10个元素。
我知道我可以迭代Map.Entry
,但我不喜欢这个决定。
还有其他办法吗?
答案 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个元素。