【问题标题】:Map, groupby, list of valuesMap、groupby、值列表
【发布时间】:2014-12-20 13:37:46
【问题描述】:

给定一张有序地图,<string,list<sting>>

k1 [v1,v2,v5]
k2 [v1]
k3 [v4,v5]
k4 [v2]

还有一组字符串[buckets]:

v2 v4 v5

输出是一张地图:

v2 [k1,k4]
v4 [k3]
v5 [k1, k3]

顺序在输出中很重要。 有没有比简单的暴力破解更好的方法,编程语言是java??

【问题讨论】:

  • 遍历原始地图,如果值包含给定的桶,则添加到该桶。合并所有的桶。
  • 好吧,你可以使用Collector (java 8)

标签: java dictionary group-by multimap


【解决方案1】:

只需遍历地图并将值收集到一个SortedMap 中,并持有SortedSets(例如,TreeMapTreeSets),将排序和复制过程留给底层数据结构:

Map<String, List<String> input = ...;
Set<String> buckets = ...;
SortedMap<String, TreeSet> output = new TreeMap<String, TreeSet>();

for (Map.Entry<String, List<String> entry : input) {
    List<String> possibleBuckets = entry.getValue();
    for (String possibleBucket : possibleBuckets) {
        if (buckets.contains(possibleBucket) {
            Set<String> set = output.get(possibleBucket);
            if (set == null) {
                set = new TreeSet<String>();
                output.put (possibleBucket, set);
            }
            set.add (entry.getKey());
        } 
    }
}

【讨论】:

    猜你喜欢
    • 2019-08-22
    • 2019-09-06
    • 2018-11-14
    • 1970-01-01
    • 2020-10-17
    • 2015-12-15
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多