Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据对象字段和给定值的绝对差值对对象列表进行排序。(爪哇)_Java_List_Sorting - Fatal编程技术网

Java 根据对象字段和给定值的绝对差值对对象列表进行排序。(爪哇)

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

假设我有一个名为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

如您所见,我希望根据给定值的绝对差值对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())));