在地图中按一个字段排序,然后按另一个字段删除元素?

随机42

假设在NavigableMap<Key, Value>哪里Key

class Key {
    private String keySort;
    private String keyRemove;

    //getters, setters etc.

    @Override
    public boolean equals(Object o) {
        //only include keyRemove
    }

    @Override
    public int hashCode() {
        //only include keyRemove
    }
}

还有一个比较器:

class SortComparator implements Comparator<Key> {
    @Override
    public int compare(Key o1, Key o2) {
        return o1.getKeySort().compareTo(o2.getKeySort());
    }    
}

现在,地图实例化如下所示:NavigableMap<Key, Value> myMap = new TreeMap<>(new SortComparator());我想要的是在Map内部,条目仅按进行排序,keySort并仅基于进行删除keyRemove

问题是,当我尝试从地图中删除仅具有keyRemove值的元素时,它无法按预期方式工作(NullPointerException在Comparator中)。为了实现预期的行为,如何固定上述实现,否则如何实现预期的行为?

编辑:我知道出了什么问题;对于替代方案,问题仍然存在。TreeMapJavaDoc:

请注意,如果排序后的映射要正确实现Map接口,则排序后的映射(无论是否提供显式比较器)所维护的顺序必须与equals一致。(有关“等于”的精确定义,请参见“比较器”或“比较器”。)

赫蒂

我在想,当您要删除地图中的条目时,remove方法将基于equals方法来完成这项工作(key==null ? k==null : key.equals(k))如此处所述http://docs.oracle.com/javase/6/docs/api/java /util/AbstractMap.html#remove%28java.lang.Object%29

一个解决办法是通过迭代通过在所有钥匙,实现自己的remove方法键集-搜索的removeKey,而是将更换O(1)复杂度为O(n)。也许这对您来说是一种解决方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongodb按一个字段选择所有字段,然后按另一个字段排序

来自分类Dev

MySQL-按一个字段排序,直到结果为空,然后按另一个字段排序

来自分类Dev

MongoDB聚合-按_id分组,然后按另一个字段划分优先级

来自分类Dev

按字段过滤,然后选择另一个字段mongodb

来自分类Dev

访问报告:如何对一个字段进行分组,但按另一个字段排序?

来自分类Dev

一个字段基于另一个字段的求和

来自分类Dev

如何获得每个字段(按另一个字段)MongoDB的不同字段计数?

来自分类Dev

连接表,对一个字段中的所有字段求和,按日期和另一个字段分隔

来自分类Dev

按另一个字段的最大值进行汇总

来自分类Dev

按“ STRING”分组,并在分组时对另一个字段求和

来自分类Dev

按另一个字段分组时,将OVER分区

来自分类Dev

Lucene-按另一个字段排序的搜索,回退到第二个字段

来自分类Dev

Lucene-按另一个字段排序的搜索,回退到第二个字段

来自分类Dev

使用PHP使用mysql按一个字段选择行并在多个表中按另一个排序

来自分类Dev

使用PHP使用mysql按一个字段选择行并在多个表中按另一个排序

来自分类Dev

打印arraylist特定字段的平均值,但按另一个字段过滤

来自分类Dev

如何按字段分组列表,并通过linq选择另一个字段的分组min?

来自分类Dev

查询以获取按字段值分组的所有行以及另一个字段的条件

来自分类Dev

删除字段并更新文档中的另一个字段

来自分类Dev

在另一个字段上键入时更新一个字段的值

来自分类Dev

如何构建其中一个字段引用另一个字段的结构

来自分类Dev

根据另一个字段更新一个字段的值

来自分类Dev

将一个字段与另一个字段的所有值分组

来自分类Dev

在一个字段或另一个字段上的SQL JOIN

来自分类Dev

SQL-如何基于另一个字段聚合一个字段

来自分类Dev

在Oracle SQL的另一个字段中查找一个字段中的文本

来自分类Dev

在Elasticsearch中查询一个字段不等于另一个字段

来自分类Dev

Mongodb在一个字段上查询取决于另一个字段

来自分类Dev

Laravel Eloquent:选择一个字段等于另一个字段的记录

Related 相关文章

  1. 1

    Mongodb按一个字段选择所有字段,然后按另一个字段排序

  2. 2

    MySQL-按一个字段排序,直到结果为空,然后按另一个字段排序

  3. 3

    MongoDB聚合-按_id分组,然后按另一个字段划分优先级

  4. 4

    按字段过滤,然后选择另一个字段mongodb

  5. 5

    访问报告:如何对一个字段进行分组,但按另一个字段排序?

  6. 6

    一个字段基于另一个字段的求和

  7. 7

    如何获得每个字段(按另一个字段)MongoDB的不同字段计数?

  8. 8

    连接表,对一个字段中的所有字段求和,按日期和另一个字段分隔

  9. 9

    按另一个字段的最大值进行汇总

  10. 10

    按“ STRING”分组,并在分组时对另一个字段求和

  11. 11

    按另一个字段分组时,将OVER分区

  12. 12

    Lucene-按另一个字段排序的搜索,回退到第二个字段

  13. 13

    Lucene-按另一个字段排序的搜索,回退到第二个字段

  14. 14

    使用PHP使用mysql按一个字段选择行并在多个表中按另一个排序

  15. 15

    使用PHP使用mysql按一个字段选择行并在多个表中按另一个排序

  16. 16

    打印arraylist特定字段的平均值,但按另一个字段过滤

  17. 17

    如何按字段分组列表,并通过linq选择另一个字段的分组min?

  18. 18

    查询以获取按字段值分组的所有行以及另一个字段的条件

  19. 19

    删除字段并更新文档中的另一个字段

  20. 20

    在另一个字段上键入时更新一个字段的值

  21. 21

    如何构建其中一个字段引用另一个字段的结构

  22. 22

    根据另一个字段更新一个字段的值

  23. 23

    将一个字段与另一个字段的所有值分组

  24. 24

    在一个字段或另一个字段上的SQL JOIN

  25. 25

    SQL-如何基于另一个字段聚合一个字段

  26. 26

    在Oracle SQL的另一个字段中查找一个字段中的文本

  27. 27

    在Elasticsearch中查询一个字段不等于另一个字段

  28. 28

    Mongodb在一个字段上查询取决于另一个字段

  29. 29

    Laravel Eloquent:选择一个字段等于另一个字段的记录

热门标签

归档