Map<String, List<>>转List<List<>>,List<List<>>大小为20,每个key的值均匀不连续的分配到每一个List
时间: 2023-11-11 14:04:14 浏览: 71
MapStruct实体转换及List转换的方法讲解
假设原始的 `Map<String, List<?>>` 对象为 `map`,我给出以下代码实现将其转换为 `List<List<?>>` 的结果:
```java
// 获取所有 key 的集合
List<String> keys = new ArrayList<>(map.keySet());
// 计算每个 List 的大小
int listSize = (int) Math.ceil((double) keys.size() / 20);
// 将 key 分配到每个 List 中
List<List<?>> listResult = new ArrayList<>();
for (int i = 0; i < keys.size(); i += listSize) {
int endIndex = Math.min(i + listSize, keys.size());
List<String> subKeys = keys.subList(i, endIndex);
List<Object> subValues = new ArrayList<>();
for (String key : subKeys) {
subValues.addAll(map.get(key));
}
listResult.add(subValues);
}
```
首先获取原始 Map 中所有 key 的集合。我们需要将这些 key 均匀地分配到 20 个 List 中,因此需要计算每个 List 的大小,代码中使用向上取整方式计算。然后通过循环将每个 key 分配到对应的 List 中,把每个 List 中的值加入到新的 List 中即可。最后返回的结果是 `List<List<?>>` 类型。
阅读全文