Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:一种排序的多重映射,它是列表的映射,而不是集合的映射_Java_List_Dictionary_Guava - Fatal编程技术网

Java:一种排序的多重映射,它是列表的映射,而不是集合的映射

Java:一种排序的多重映射,它是列表的映射,而不是集合的映射,java,list,dictionary,guava,Java,List,Dictionary,Guava,我正在寻找一个排序的多重映射,其中一个键可以映射到多个值,而不管这些值的相等值返回什么。因此,它不应该是这样的: import com.google.common.collect.*; public class Test { public static void main(String[] args) { Multimap<Double, String> multimap = TreeMultimap.create(); multimap.p

我正在寻找一个排序的多重映射,其中一个键可以映射到多个值,而不管这些值的相等值返回什么。因此,它不应该是这样的:

import com.google.common.collect.*;

public class Test {
    public static void main(String[] args) {
        Multimap<Double, String> multimap = TreeMultimap.create();
        multimap.put(3.0, "a");
        multimap.put(3.0, "a");
        multimap.put(2.0, "b");
        // prints "b", "a"
        for(String s : multimap.values())
            System.out.println(s);
    }
}
我一直在使用java.util.Map,但它附带了一些样板文件

其中一种可能性是参数化类型:

public class SortedMapOfLists<K, V> {
    SortedMap<K, List<V>> map = new TreeMap<>();
    public void put(K key, V value) {
        List<V> list = map.get(key);
        if(list == null) {
            list = new ArrayList<>();
            map.put(key, list);
        }
        list.add(value);
    }
    public List<V> values() {
        List<V> values = new ArrayList<>();
        for(List<V> list : map.values())
            for(V value : list)
                values.add(value);
        return values;
    }
}

但此实现的功能有限。

听起来您正在寻找MultimapBuilder.treeKeys.arrayListValues.build。

我想知道为什么这里的第一个调用端口是匆忙访问第三方库。在我看来,使用标准集合框架,您可以实现所需的功能,而无需像您所建议的那样多的样板文件。例如,给定一个普通的旧树形图:

SortedMap<String, List<String>> map = new TreeMap<>();
您的put方法可以替换为一行:

map.computeIfAbsent(key, k -> new ArrayList<>()).add(val);
类似地,如果您希望获取与给定键关联的值,并返回列表的浅层副本,或者如果没有关联的值,则返回空的值-您的方法实际上没有涵盖这些值,但您可能希望这样做,您可以执行以下操作:

List<String> vals = new ArrayList<>(map.getOrDefault(key, Collections.emptyList()));

从您提到的特定用例来看,第三方库似乎是一种不必要的依赖,几乎没有什么好处。

是的,正如预期的那样工作。