用Java对对象数组进行排序

时间:2013-02-19 09:23:27

标签: java sorting

我正在制作一个报告模块,显示花费的时间和任务数量。这些值在Java Bean中设置,bean对象存储在一个数组中。我使用单独的查询来获取任务的时间和数量。现在我必须根据任务的时间和数量对数组进行排序。 下面的代码仅比较字符串:

if (!list.isEmpty()) {
    Collections.sort(list, new Comparator<Project>() {
        @Override
        public int compare(Project p1, Project p2) {

            return p1.getName().compare(p2.getName());
        }
       });
   }

我在排序存储在数组中的JavaBean中的属性的整数值时遇到问题。非常感谢任何帮助。

6 个答案:

答案 0 :(得分:5)

在下面的评论中,您说的是:

Project[] array = new Project[3];

如果我是你,我会将Project声明为

public class Project implements Comparable<Project> {

    @Override
    public int compareTo(Project other) {
        return this.id - other.id; // or whatever property you want to sort
    }

然后您只需调用

即可对数组进行排序
Arrays.sort(array);

如果您不希望您的班级实施Comparable界面,您可以将比较器传递给Arrays.sort()

    Arrays.sort(array, new Comparator<Project>() {
        @Override
        public int compare(Project o1, Project o2) {
            return o1.id - o2.id; // or whatever property you want to sort
        }
    });

我使用了一个匿名的,如果需要,你也可以将它提取到自己的类中。

答案 1 :(得分:0)

如下:

Project[] project = ..initialise array;

List<Project> projectList = Arrays.asList(project);
Collections.sort(projectList, new Comparator<Project>() {
    @Override
    public int compare(Project p1, Project p2) {
        if(p1.getIntProperty() == p2.getIntProperty()) return 0;
        return p1.getIntProperty() > p2.getIntProperty() ? 1 : -1;
    }
   });
}

答案 2 :(得分:0)

尝试这样排序整数

return(p1.getIntProperty() - p2.getIntProperty());

答案 3 :(得分:0)

你是否研究过java中的Comparator和Comparable接口?您可以使用compare()方法比较数组中的元素并相应地对它们进行排序。您查看此帖子,其中相同的问题已经回答Sort Java Collection

答案 4 :(得分:0)

您可以将比较器传递给Arrays.sort()

Arrays.sort(array, new Comparator<Project>() {
    @Override
    public int compare(Project o1, Project o2) {
        return o1.id - o2.id; // or whatever property you want to sort
    }
});

答案 5 :(得分:0)

假设您有List<Project>,Java8中所需的一切(因为您可以使用lambda expression作为比较器)是:

Collections.sort(list, (o1, o2) -> o1.getName().compareTo(o2.getName()));

List有一个sort(Comparator)方法,所以你可以进一步缩短它:

list.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));

通过方法引用,它变得更加清晰:

list.sort(Comparator.comparing(Project::getName));