java - Java:排序的多图,它是列表的映射而不是集合的映射
问题描述
我正在寻找一个排序的多重映射,其中一个键可以映射到多个值,无论equals()
这些值返回什么。因此,它不应该是这样的:
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<Key, List<Value>>
,但它带有一些样板。
其中一种可能性是参数化类型:
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()
.
推荐阅读
- c++ - 为什么输入会导致我的 do/while 菜单出现问题
- pandas - 熊猫将数据框转换为床文件?
- python - CallbackQueryHandler 回复消息而不是编辑消息 - Python Telegram Bot
- c# - WPF 中的空可视化树
- ibm-cloud - 如何使用 Watson Assistant 创建“描述”实体
- azure - 创建 Azure 恢复服务保管库 - Python SDK - 错误请求
- godot - 如何让播放器平滑旋转
- android - 为什么 Gradle 完成下载库后我的 Android 工作室崩溃
- sql - 过滤掉相似的值字符串sql
- windbg - 在 Windbg 中查看权限