java - 如何实现始终返回非空值的排序多值树映射

标签 java collections guava apache-commons treemap

由于 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/

相关文章:

java - 列表转数组的区别

java - Google Guava RangeMap 迭代顺序

java - Guice - 如何实现返回不同实现的工厂

Java编译错误用泛型参数覆盖泛型方法

java - 在泛型类中实现数组列表的 Add 方法

java - 我怎样才能用 Guava 获得给定包的所有类

java - 遍历 Collection<List<Integer>>

java - 无法完全更改 Eclipse ADT 主题配色方案

Java对bean集合进行排序的有效方法

java - 优先级队列不维护排序顺序