2

我正在开发一个报告模块,该模块显示花费的时间和任务数量。这些值在 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 中的属性的整数值进行排序时遇到问题。非常感谢任何帮助。

4

6 回答 6

7

在您下面的问题的评论中,您说您有:

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
        }
    });

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

于 2013-02-19T09:53:48.603 回答
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;
    }
   });
}
于 2013-02-19T09:26:57.640 回答
0

试试这个对整数进行排序

return(p1.getIntProperty() - p2.getIntProperty());
于 2013-02-19T09:28:10.610 回答
0

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

于 2013-02-19T09:35:04.953 回答
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
    }
});
于 2014-06-26T11:48:41.747 回答
0

假设你有一个List<Project>,你在 Java8 中所需要的(因为你可以为 Comparator 使用lambda 表达式)是:

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));
于 2017-06-14T07:55:49.147 回答