Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 62d40b1

Browse files
author
jinzhencheng
committed
update 'Sort ArrayList of custom Objects by property'
1 parent 941d6da commit 62d40b1

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
3+
##通过对象属性对常规对象的ArrayList进行排序
4+
5+
###问题
6+
我读过使用Comparator对常规类的ArrayList进行排序的示例,但是它们大多数使用comparedTo(),据我了解这是一个对字符串进行操作的方法。
7+
我想要对一个由常规对象构成的ArrayList,通过它的属性(一个Date对象,getStartDate())对ArrayList进行排序。通常情况下我这样比较它们:
8+
```java
9+
item1.getStartDate().before(item2.getStartDate())
10+
```
11+
所以我能不能像下面一样:
12+
```java
13+
public class CustomComparator {
14+
public boolean compare(Object object1, Object object2) {
15+
return object1.getStartDate().before(object2.getStartDate());
16+
}
17+
}
18+
19+
public class RandomName {
20+
...
21+
Collections.sort(Database.arrayList, new CustomComparator);
22+
...
23+
}
24+
```
25+
26+
###回答
27+
以前Date声明了Comparable,它有一个像处理字符串操作那样的compareTo方法。因此你可以这样:
28+
```java
29+
public class CustomComparator implements Comparator<MyObject> {
30+
@Override
31+
public int compare(MyObject o1, MyObject o2) {
32+
return o1.getStartDate().compareTo(o2.getStartDate());
33+
}
34+
}
35+
```
36+
这儿的compare()方法必须返回int,所以不能像你预期那样直接返回boolean.
37+
你的代码看起来应该是这样:
38+
```java
39+
Collections.sort(Database.arrayList, new CustomComparator());
40+
```
41+
如果你不需要重复使用comparetor的话,一种简单的方法是,把它写成一个内部类的样子:
42+
```java
43+
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
44+
@Override
45+
public int compare(MyObject o1, MyObject o2) {
46+
return o1.getStartDate().compareTo(o2.getStartDate());
47+
}
48+
});
49+
```
50+
自java8 开始,你可以使用lambda表达式一种简洁的方式来写Comparator()
51+
```java
52+
Collections.sort(Database.arrayList,
53+
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
54+
```
55+
并且List有一个sort(Comparator)方法,所以你可以进一步简化它
56+
```java
57+
58+
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
59+
```
60+
这是一种司空见惯的方法,使用Comparable为一个类创建一个Comprator
61+
```java
62+
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
63+
All of these are equivalent forms.
64+
```
65+
66+
stackoverflow原地址:http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property
67+
68+
69+
70+
71+
72+
73+
74+
75+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /