2013-02-19 134 views
2

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

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

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

我在排序存储在一个array.Any帮助感激在的JavaBean的属性的整数值的问题。

+0

你绑排序整数数组,你可以使用'Arrays.sort(INT []一)' – Shivam 2013-02-19 09:26:01

+0

那么是什么阵是什么样子? – Jason 2013-02-19 09:26:11

+0

'Integer'和'Date'都有一个'compareTo'方法,你不能使用它们吗? – sp00m 2013-02-19 09:28:57

回答

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

我用了一个匿名的一个,你也可以,如果需要在其他地方解压到它自己的类。

+0

正是我搜索的...感谢jlordo的大力帮助.. – santhosh 2013-02-19 10:17:33

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

如果两个值相等会发生什么? – Jason 2013-02-19 09:28:13

+2

如果两个值相等会怎样?你永远不会返回'0'。 – 2013-02-19 09:28:33

+0

平等呢? – 2013-02-19 09:29:50

0

试试这个为整数

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

你有没有考虑比较器和Java中可比接口进行排序。您可以使用compare()方法比较数组中的元素并相应地对它们进行排序。您检查这个帖子里同样的问题已经answerd Sort Java Collection

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

假设你有一个List<Project>,你在Java8(因为你可以使用lambda expression的比较)需要的是:

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

而且列表有一个排序(比较器)的方法,所以你可以进一步缩短:

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

有了方法引用它变得更清洁:

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

谁在使用公共领域? – shmosel 2017-06-14 07:58:01

+0

假设。但你是对的,我编辑了答案。谢谢。 – Stas 2017-06-14 08:19:34

+0

我还是很困惑。所有的解决方案都使用访问器方法。你的意思是方法引用? – shmosel 2017-06-14 16:17:01