如何通过对象变量字符串对对象的数组列表进行排序

时间:2020-06-17 10:45:36

标签: java android object arraylist

obj包含 名称 价钱 日期

如何按日期,名称或价格排序,并具有递增和递减功能?

谢谢您的时间

1 个答案:

答案 0 :(得分:2)

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

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更灵活,因为您可以选择行为运行时间。 如果需要自定义逻辑,则可以在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;
  }