java - 以元组为键的Java映射,通过元组键删除/获取
问题描述
我有一个场景,我希望有一个以元组为键的排序映射:
var scheduledRunnables = new TreeMap<Tuple<Integer, String>, Runnable>(Comparator.comparing(Tuple::getKey));
添加时,我想添加一个元组:
scheduledRunnables.put(new Tuple<>(order, taskName), task);
排序时,我希望它按顺序整数排序,因为这决定了可运行文件的执行顺序。我不一定知道变量的值taskName
。调用时get
,我只想提供订单整数,原因与前面所述相同。打电话时put
,我想考虑整对。所以是这样的:
scheduledRunnables.put(new Tuple<>(1, "Some task"), () -> System.out.println("asdf"));
scheduledRunnables.get(1).run(); // Should output 'asdf'
scheduledRunnables.put(new Tuple<>(1, "Some task"), () -> System.out.println("qwerty"));
scheduledRunnables.get(1).run(); // Should output 'qwerty'
scheduledRunnables.remove(1).run(); // Should output 'qwerty' and remove from map
该类Tuple
只是一个看起来像这样的数据持有者:
@Data
public class Tuple<K, V> {
private final K key;
private V value;
public Tuple(K key, V value) {
this.key = key;
this.value = value;
}
}
这将如何实施?是否可以不自定义实现 SortedMap 接口?有没有更好的方法来实现我所追求的?
解决方案
老实说,只需维护两张地图。
Map<Integer, Runnable> idToRunnable;
Map<Integer, String> idToName;
或者使用元组作为值而不是键:
Map<Integer, Tuple<String, Runnable>>
推荐阅读
- javascript - 这个在 JS 中具有默认属性和类类型对象的数据结构是什么?
- video - ffmpeg录制的同时观看多流视频文件
- javascript - 图表导致内存泄漏
- sql-server - SSAS - 如何在不丢失数据的情况下执行部分多维数据集处理
- php - 扩展 DOM 是必需的。Symfony 项目没有启动
- javascript - 如何在反应redux中只对值求和一次
- java - 比较两个未知类型的数组
- centos - Nagios 错误:/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
- javascript - 在 React 中动态添加后的 getElementById
- sql - SQL Server:合并具有相同ID但不同列值的两行