Java 根据对象字段和给定值的绝对差值对对象列表进行排序。(爪哇)
假设我有一个名为Person的类 我有一张7岁、2岁、9岁、4岁和17岁的人的名单。 我想按照Person对象的年龄与给定值的绝对差值,按升序对Person对象列表进行排序 例如,我想根据人的年龄和给定年龄(比如7岁)的绝对差异对人进行排序 结果将是一个7、9、4、2、17岁的人物对象列表 这是因为Java 根据对象字段和给定值的绝对差值对对象列表进行排序。(爪哇),java,list,sorting,Java,List,Sorting,假设我有一个名为Person的类 我有一张7岁、2岁、9岁、4岁和17岁的人的名单。 我想按照Person对象的年龄与给定值的绝对差值,按升序对Person对象列表进行排序 例如,我想根据人的年龄和给定年龄(比如7岁)的绝对差异对人进行排序 结果将是一个7、9、4、2、17岁的人物对象列表 这是因为 abs(7 - 7) = 0 abs(7 - 9) = 2 abs(7 - 4) = 3 abs(7 - 2) = 5 abs(7 - 17) = 10 如您所见,我希望根据给定值的绝对差值对Pe
abs(7 - 7) = 0
abs(7 - 9) = 2
abs(7 - 4) = 3
abs(7 - 2) = 5
abs(7 - 17) = 10
如您所见,我希望根据给定值的绝对差值对Persons对象列表进行排序。该值并不总是相同的。您可以创建一个类似于以下的comparator类:
public class MyComparator implements Comparator<Person> {
private final int refAge;
public MyComparator(int refAge) {
this.refAge = refAge;
}
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(Math.abs(p1.getAge()-refAge),
Math.abs(p2.getAge()-refAge));
}
}
然后使用它对列表进行排序:
List<Person> persons = ...;
Collections.sort(persons, new MyComparator(7));
请张贴您尝试过的代码以及您遇到的问题。我没有尝试过任何代码。在Java中搜索不同的对象排序方法之后,似乎在相同类型的对象之间进行了比较。我没有找到任何可以传递参数并基于参数执行排序的解决方案。可以与实现Comparator接口的对象实例进行比较。因此,您必须编写一个实现Comparator的类,并将一些targetAge作为构造函数参数。@CheeJingJie首先了解如何实现。当您可以这样做时,使用Math.abs7-person.getAge而不是person.getAge就足够简单了。但是试着自己尝试一下。我对Java和接口不太熟悉,所以我不太了解Comparator接口和compare函数是如何工作的,很抱歉。为什么compare的返回中有逗号statement@AshishKamble呃。。。因为还有第二个参数?好的,谢谢,比较在这里被基于年龄的特殊逻辑覆盖
List<Person> persons = ...;
Collections.sort(persons, new MyComparator(7));
List<Person> people = ...;
people.sort(Comparator.comparingInt(p -> Math.abs(7 - p.getAge())));