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()));
从您提到的特定用例来看,第三方库似乎是一种不必要的依赖,几乎没有什么好处。是的,正如预期的那样工作。