假设我有一个类 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/