【发布时间】:2020-06-17 10:45:36
【问题描述】:
obj 包含 姓名 价钱 日期
如何使用升序和降序功能按日期、名称或价格订购?
感谢您的宝贵时间
【问题讨论】:
-
如果它是一个 ArrayList 怎么办
-
ArrayList 是 List 的一种,所以没关系。
标签: java android object arraylist
obj 包含 姓名 价钱 日期
如何使用升序和降序功能按日期、名称或价格订购?
感谢您的宝贵时间
【问题讨论】:
标签: java android object arraylist
有一些方法可以做到这一点。
1,流:
list.stream()
.sorted(Comparator.comparing(MyObject::getPrice))
.collect(Collectors.toList())
对于反转顺序:
list.stream()
.sorted(Comparator.comparing(MyObject::getName).reversed())
.collect(Collectors.toList())
2、Comparator
list.sort(comparator) 或 Collections.sort(list,comparator)
Comparator<MyObj> priceComparator=new Comparator<MyObj>() {
@Override
public int compare(MyObj o1, MyObj o2) {
//Note that compareTo only available if you implement comparable
//If not, return values I describe later
//Or use Comparator.comparing(field/keyExtractor)
return o1.getPrice().compareTo(o2.getPrice());
}
})
您可以为任何字段创建实现。您可以在此处实现逻辑以组合字段等。
3、在Data对象中实现Comparable接口。
public class MyObj implements Comparable<MyObj> {
@Override
public int compareTo(MyObj o) {
return price.compareTo(o.getPrice());
}
[...]
}
Comparator 比Comparable 灵活得多,因为您可以选择行为runetime。
如果需要自定义逻辑,可以写在 compare 方法中。
您可以返回:
0 if equals
1 if left is greater
-1 if right is greater
例如在自定义比较器中:
public int compare(MyObj o1, MyObj o2) {
int result=0;
if(o1.price>o2.price) result=1;
[...]
return result;
}
【讨论】: