java - 如何使用值范围的比较器?

标签 java sorting comparator

假设我有一个类 Person,其属性为 age 和 name。我想使用年龄范围来订购人员列表,例如按姓名在该范围内。 例如,这些范围可以是 10 年。一个更形象的例子:

  • 第 1 个人:10 号
  • 第二个人:13 艾伯特
  • 第三人:26 亚历克斯
  • 第 4 人:22 奥利弗

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

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

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

最佳答案

您需要将年龄除以 10 - 使用整数除法只会丢弃“个”部分,并留下易于比较的整数。 Java 8 的比较器语法使这变得非常优雅:

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

关于java - 如何使用值范围的比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505504/

相关文章:

java - Java 中两个 Map<Long, Integer> 之间是否至少存在差异的可读方式?

Java - 卸载类

java - 您如何处理每个整数基数排序的位置?

c++ - 按降序对 vector 进行排序

c++ - 查找列表的最左边和最右边的点。 std::find_if 是正确的方法吗?

java - 如何在Java中保持原始排序不变的情况下基于比较器执行排序

java - 优先队列问题

java - Japanel 中带有 jList 的滚动 Pane 不起作用

algorithm - 渐近符号有缺陷吗?

java - 根据对象列表中列表中的字段对对象列表进行排序