如何将一张大地图分成几张较小的地图?

时间:2018-10-31 06:27:50

标签: java

我必须使用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;
}
 ...

非常感谢您。

2 个答案:

答案 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对象将包含较小的地图