我必须使用Java 7来将一个大Map拆分为几个较小的map? 例如 我有一张像这样的大地图:
{StringA_0001, ABC;
StringA_0002, DEF;
StringA_0003, ABD;
StringB_0001, ABE;
StringB_0002, DEG;
StringC_0001, GEF;
...
}
我可以知道如何通过地图的键模式将上面的地图分成几张地图(就像上面以相同的值开头):
{StringA_0001, ABC;
StringA_0002, DEF;
StringA_0003, ABD;
}
{
StringB_0001, ABE;
StringB_0002, DEG;
}
{
StringC_0001, GEF;
}
...
非常感谢您。
答案 0 :(得分:0)
我假设您想转换为地图
因此,我们将对键进行分组,例如Map <“ STRINGA”,Map <“ StringA_0001”,“ ABC” >>。
以下功能将有助于转换。
public Map<String,Map<String,String>> splitMap(Map<String,String> map){
Map<String,Map<String,String>> res = new HashMap<String,Map<String,String>>();
if(map==null){
return res;
}
for(Map.Entry<String,String> entry:map.entrySet()){
String key = entry.getKey();
String[] subKeys = key.split("_");
String subKey = subKeys[0];
if(!res.containsKey(subKey)){
res.put(subKey, new HashMap<String,String>());
}
res.get(subKey).put(key, entry.getValue());
}
return res;
}
如果要迭代多个小地图,只需使用map.values()返回Map的Collection。
答案 1 :(得分:0)
List<List<String>> keySetPartition = Lists.partition(Lists.newArrayList(map.keySet()), 10);
List<Map<String, GSDashboardMaster>> partitionedMaps =
keySetPartition
.stream()
.map(list -> list
.stream()
.collect(Collectors.toMap(Function.identity(), map::get)))
.collect(Collectors.toList());
现在partitionedMaps对象将包含较小的地图