【问题标题】:how to order arraylist of objects by object variable string [duplicate]如何按对象变量字符串对对象的arraylist进行排序[重复]
【发布时间】:2020-06-17 10:45:36
【问题描述】:

obj 包含 姓名 价钱 日期

如何使用升序和降序功能按日期、名称或价格订购?

感谢您的宝贵时间

【问题讨论】:

  • 如果它是一个 ArrayList 怎么办
  • ArrayList 是 List 的一种,所以没关系。

标签: java android object arraylist


【解决方案1】:

有一些方法可以做到这一点。

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

 [...]
}

ComparatorComparable 灵活得多,因为您可以选择行为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;
  }

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2015-07-06
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2011-01-13
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多