在 Java 中对数组列表进行排序<List>



我有一个ArrayList<List>,其中List具有保存名称的字符串值,然后将双精度转换为字符串。

的例子:

List<String> list = New List; 
list.add("Abraham");
list.add(String.valueOf(0.65));
List<String> list2 = New List; 
list2.add("Bowers");
list2.add(String.valueOf(0.89));
ArrayList<List> arrayList = new ArrayList<>();
arrayList.add(list); 
arrayList.add(list2); 

如何按双精度数的值降序排序ArrayList ?

在自定义实现Comparator<ArrayList>之后使用Collections.sort(arrayList, instanceOfYourOwnImplemenationOfComparator)

或者更好,Java是一种面向对象的语言,所以创建一个专门用于存储String+double类型的类,并使其具有可比性。

class MyClass implements Comparable<MyClass> {
   private String word;
   private double score;
   MyClass(String word, double score) {
       this.word = word;
       this.score = score;
   }
   @Override
   public int compareTo(MyClass o) {
      return (int) Math.round(Math.signum(score - o.score));
   }
}

我会改变你的实现并创建一个包含两个字段的类,一个String和一个Double。这个类将实现Comparable接口,并且它的compareTo将仅基于double类型。就像

public class MyClass implements Comparable<MyClass> {
    private double value;
    private String name;
    /*Constructors, setters and getters*/
    public int compareTo(MyClass o) {
        return(new Double(value)).compareTo(myO.getValue));        
    }
}
那么,你的代码将变成:
ArrayList<List> arrayList = new ArrayList<>();
arrayList.add(new MyClass("abraham",0.65)); 
arrayList.add(new MyClass("bowers", 0.89)); 
Collections.sort(arrayList);

我只是输入了代码,但我相信这个想法是相当简单的。

您应该使用类。命名为Foo

那么你会做

List<Foo> mylist = new ArrayList<Foo>();
mylist.add (new Foo("Abraham", 0.65);
mylist.add (new Foo("Bowers", 0.89);
// etc

我将把它作为练习留给您来编写Foo类。它应该实现Comparable

class Foo implements Comparable {
// TODO
最后

 Collections.sort(mylist);

在Java 8中,它可以用这样的流来完成

arrayList.stream()
    .sorted((l1, l2) -> Doulbe.valueOf(l1.get(1)) - Doulbe.valueOf(l2.get(1)))
    .collect(Collectors.toList())

这里l1和l2是你的子列表,它们的第二个元素是你的数字。所使用的比较器从另一个数字中减去一个数字,以决定子列表应该以什么顺序放入输出arrayList

最新更新