java - 如何实现始终返回非空值的排序多值树映射
问题描述
由于 Struts 的原因,我需要一个始终返回非空值的排序映射。
对于我的具体情况,我有以下实现,它工作正常:
public class NonEmptyMap extends TreeMap<String, List<MyObject>> {
@Override
public List<MyObject> get(Object key) {
final List<MyObject> result = super.get(key);
if (result == null) {
super.put((String) key, new NonEmptyList<MyObject>(MyObject.class));
}
return super.get(key);
}
}
NonEmptyList
是列表的特殊版本,它总是返回非空对象。例如nonEmptyList.get(2)
,对大小为 1 的 nonEmptyList 的调用将是创建 2 个空MyObject
对象的原因,将它们插入列表并将最新元素返回给客户端调用。
我想概括实现以支持任何Key/Value
有没有现成的库实现?
解决方案
尽管我很确定您的列表实现不会遵守List
合同(即如果索引超出范围get()
,则应该抛出,除非您愿意从返回,但这可能会导致其他意外结果......),您可以使用自定义使用:(index < 0 || index >= size())
MAX_INTEGER
size()
ListMultimap
Multimaps#newListMultimap(Map, Supplier<List>)
static <K extends Comparable<K>, V> ListMultimap<K, V> create(Class<V> valueClass) {
return Multimaps.newListMultimap(new TreeMap<>(), () -> new NonEmptyList<>(valueClass));
}
推荐阅读
- ruby - Ruby - 在 Windows 环境中调用命令并与 shell 交互
- java - 在 opentok java sdk v4.3.0 中开始归档导致 400(错误请求)
- php - 使用 URL 成功传递参数后的空 $_ GET
- angular - 将一组艺术家添加到 1 个节日不起作用
- django - 如何修复“设置”对象没有属性“CASSANDRA_FALLBACK_ORDER_BY_PYTHON”
- java - 让 PhantomJS 与 java 应用程序一起工作
- php - 在 MySQL 中,如何从两个不同的表中选择 *?
- php - 同一服务器上的两个 laravel 项目的环境问题
- visual-studio-code - 我可以向 Visual Studio Code 的 Beautify 扩展添加新语言吗?
- dart - 如何在颤动中设计一堆Raise按钮和图像