我有一个像List<Object> p.I这样的对象列表,我想使用对象名字段按字母顺序对该列表进行排序。Object包含10个字段,name字段就是其中之一。
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());
}
} );
}但是没有什么比得上String.compare..?
发布于 2011-12-08 22:52:54
从您的代码看,您的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());
}
});
}或者如果您使用的是Java 1.8
list
.stream()
.sorted((object1, object2) -> object1.getName().compareTo(object2.getName()));最后一点--检查列表大小是没有意义的。排序将在空列表上工作。
发布于 2011-12-08 23:49:30
根据字母顺序对字符串进行排序的最正确方法是使用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());
}
});
}如果您不关心国际化,请使用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());
}
});
}发布于 2018-02-07 06:10:51
使用Java8 Comparator.comparing
list.sort(Comparator.comparing(Campaign::getName));https://stackoverflow.com/questions/8432581
复制相似问题