是否可以在没有循环的情况下获取未排序地图的子图?
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 个。
我从另一个方法
得到了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 个。