由于 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
是列表的特殊版本,它始终返回非空对象。例如,对大小为 1 的 nonEmptyList 的 nonEmptyList.get(2)
调用将创建 2 个空 MyObject
对象,将它们插入列表并将最新元素返回给客户端打电话。
我想概括实现以支持任何键/值
有现成的库实现吗?
最佳答案
尽管我很确定您的列表实现不符合 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));
}
关于java - 如何实现始终返回非空值的排序多值树映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60969132/