我有一个像对象列表List<Object> p.我想使用对象名称字段按字母顺序对此列表进行排序.对象包含10个字段,名称字段是其中之一.
if (list.size() > 0) {
Collections.sort(list, new Comparator<Campaign>() {
@Override
public int compare(final Object object1, final Object object2) {
return String.compare(object1.getName(), object2.getName());
}
} );
}
Run Code Online (Sandbox Code Playgroud)
但是没有像String.compare那样的东西..?
Rob*_*t B 217
从您的代码中,您Comparator的参数化似乎已经过了Campaign.这只适用于List<Campaign>.此外,您正在寻找的方法是compareTo.
if (list.size() > 0) {
Collections.sort(list, new Comparator<Campaign>() {
@Override
public int compare(final Campaign object1, final Campaign object2) {
return object1.getName().compareTo(object2.getName());
}
});
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Java 1.8
list
.stream()
.sorted((object1, object2) -> object1.getName().compareTo(object2.getName()));
Run Code Online (Sandbox Code Playgroud)
最后一条评论 - 检查列表大小没有意义.排序将在空列表中工作.
vik*_*tor 14
按字母顺序排序字符串的最正确方法是使用Collator,因为国际化.由于额外的字符数较少,有些语言的顺序不同.
Collator collator = Collator.getInstance(Locale.US);
if (!list.isEmpty()) {
Collections.sort(list, new Comparator<Campaign>() {
@Override
public int compare(Campaign c1, Campaign c2) {
//You should ensure that list doesn't contain null values!
return collator.compare(c1.getName(), c2.getName());
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果你不关心国际化使用string.compare(otherString).
if (!list.isEmpty()) {
Collections.sort(list, new Comparator<Campaign>() {
@Override
public int compare(Campaign c1, Campaign c2) {
//You should ensure that list doesn't contain null values!
return c1.getName().compare(c2.getName());
}
});
}
Run Code Online (Sandbox Code Playgroud)
tob*_*yer 11
看看Collections.sort()和Comparator界面.
字符串比较可以用object1.getName().compareTo(object2.getName())或完成object2.getName().compareTo(object1.getName())(取决于你想要的排序方向).
如果您希望排序与案例无关,请执行此操作object1.getName().toUpperCase().compareTo(object2.getName().toUpperCase()).
使用Java 8 Comparator.comparing:
list.sort(Comparator.comparing(Campaign::getName));
Run Code Online (Sandbox Code Playgroud)
public class ObjectComparator implements Comparator<Object> {
public int compare(Object obj1, Object obj2) {
return obj1.getName().compareTo(obj2.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
请将Object替换为包含name字段的类
用法:
ObjectComparator comparator = new ObjectComparator();
Collections.sort(list, comparator);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170316 次 |
| 最近记录: |