【问题标题】:Insertion of treemap by one comparator and getting an entry based on another comparator in java一个比较器插入树形图并在java中基于另一个比较器获取条目
【发布时间】:2015-09-14 21:06:15
【问题描述】:
 class Person
  {

  int id;
  String name;
  }

我想创建一个 TreeMap 。使用的比较器是

Comparator<Person> comp = (e1, e2) -> e1.name.compareTo(e2.name);

所以我会得到一个基于人名属性升序排序的树形图。

但我想根据元素的 id 属性更新 TreeMap,因为 id 是唯一元素。所以如果我得到一个 Person 对象,我应该得到 基于 id 而不是名称的键值对。怎么可能?

【问题讨论】:

  • 你为什么不简单地把它改成id而不是名字?

标签: java treemap


【解决方案1】:

您可以将比较器更改为首先按名称比较,然后按 ID 进行比较:

Comparator<Person>  comp = (e1, e2) -> {
    int res = e1.name.compareTo(e2.name);
    if (res == 0)
        return Integer.compare(e1.id,e2.id);
    else
        return res;
};

这将确保按名称排序,以及由名称和 id 确定的唯一性(即两个元素必须具有相同的名称和 id 才能被视为相同的元素)。这是假设如果两个Persons 有相同的id,它们也有相同的name

【讨论】:

    【解决方案2】:

    TreeMap 只能有一个比较器。

    您实际上需要的是两个TreeMap 对象,一个将名称映射到Person 对象,另一个将ID 映射到Person 对象。

    当您在一张地图中添加或删除条目时,您需要对另一张地图进行相应的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多