在Java中对ArrayList<List>进行排序[重复]

Posted

技术标签:

【中文标题】在Java中对ArrayList<List>进行排序[重复]【英文标题】:Sorting an ArrayList<List> in Java [duplicate] 【发布时间】:2017-02-09 01:23:29 【问题描述】:

我有一个ArrayList&lt;List&gt;,其中Lists 具有包含名称的字符串值,然后将双精度转换为字符串。

例子:

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

【问题讨论】:

您确定不想使用Map 吗?为什么将namevalue 存储在同一个列表中? 列表将包含两个以上的项目,我想知道基于相关变量的名称顺序。 你的描述(keyvalue 对)非常适合Map...查找HashMap @BryceD 看看这个:***.com/questions/780541/… 【参考方案1】:

在自定义实现Comparator&lt;ArrayList&gt; 后使用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));
   


【讨论】:

是的。固定的。谢谢【参考方案2】:

我会更改您的实现并创建一个包含两个字段的类,一个 String 和一个 Double 字段。此类将实现 Comparable 接口,其 compareTo 将仅基于双精度。类似的东西

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

我刚刚输入了代码,但我相信这个想法很简单。

希望对你有帮助。

【讨论】:

【参考方案3】:

你应该使用一个类。我们就叫它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);

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

以上是关于在Java中对ArrayList<List>进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按降序对 ArrayList<Long> 进行排序?

java中对List中对象排序实现

java中对List中对象排序实现

java和python细节总结

java list排序出错

java中两个list集合如何排序