通过一个比较器插入树形图并基于java中的另一个比较器获取条目

时间:2015-09-14 12:54:42

标签: java treemap

 class Person
  {

  int id;
  String name;
  }

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

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

所以我将根据person的name属性获得一个升序的树形图。

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

2 个答案:

答案 0 :(得分: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;
};

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

答案 1 :(得分:0)

TreeMap只能有一个比较器。

这里你真正需要的是两个TreeMap个对象,一个将名称映射到Person个对象,另一个映射id到Person个对象。

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