按对象的属性按数字顺序排序数组

时间:2015-12-04 03:06:24

标签: java arrays sorting

我正在努力按照对象的属性排序数组。我知道如何按顺序对数字进行排序,但我无法弄清楚如何使用对象进行排序。例如,假设对象A的position属性为1,而对象B的position属性为2.这些对象位于数组中。我怎么能根据这个属性对它们进行排序?

由于

2 个答案:

答案 0 :(得分:1)

你有类似的东西:

public class ExampleObject {
    public int position;
}

然后,只需使用Comparator

public static void main(String args[]) {
    //example numbers
    final Random r = new Random();
    final List<ExampleObject> arrList = new ArrayList<>(100);
    for (int i = 0; i < 100; i++) {
        ExampleObject obj = new ExampleObject();
        obj.position = r.nextInt(1000);
        arrList.add(obj);
    }

    //comparator (as a lambda)
    Collections.sort(arrList, (a, b) -> {
        return a.position - b.position;
    });

    //output result
    for (ExampleObject obj : arrList) {
        System.out.println(obj.position);
    }
}

此外,如果您必须对数组进行排序而不是List,您也可以使用Arrays.sort()这样的Comparator

答案 1 :(得分:0)

您可以通过在类中实施Comparable界面进行比较,如下所示。

public class Applcation {
    public static void main(String[] args) {
        A ary[] = {new A("D", 1),new A("C", 7),new A("K", 4),new A("L", 8),new A("S", 3)};
        Arrays.sort(ary);
        for (A a : ary) {
            System.out.println(a.id+" - "+a.name);
        }
    }

}
class A implements Comparable<A>{

    String name;
    int id;

    public A(String name, int id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public int compareTo(A a) {
        return this.id-a.id;
    }


}

或者作为替代方案,您可以使用java 8流对数组进行排序,而无需实现Comparable

Arrays.stream(ary).sorted((a1,a2)->Integer.compare(a1.id, a2.id)).forEach(e->System.out.println(e.id+" - "+e.name));

输出:

1 - D
3 - S
4 - K
7 - C
8 - L