如何使用比较器使用值范围?

时间:2018-09-25 19:32:52

标签: java sorting comparator

比方说,我有一个类别为Person的类age and name。我想订购一个使用年龄范围的人的列表,例如在名字范围内。 例如,这些范围可以是10年。另一个图形示例:

  • 人1:10尼克
  • 人2:13位艾伯特
  • 人3:26 alex
  • 人4:22奥利弗

比较器应返回person 2 > person 1 > person 3 > person 4

我尝试过使用Math.abs(p1.age - p2.age)实现比较器,但是它没有按预期工作。

在这种情况下,如何实现比较器以使用age属性的范围返回比较器?

1 个答案:

答案 0 :(得分:1)

您需要将年龄除以10-使用整数除法将只丢弃“ ones”部分,并使您可以轻松比较整数。 Java 8的比较器语法使这一点非常优雅:

List<Person> people = /* initialize the list... */
people.sort(Comparator.comparingInt((Person p) -> p.getAge() / 10)
                      .thenComparing(Person::getName));