在Java中对ArrayList<List>进行排序[重复]
Posted
技术标签:
【中文标题】在Java中对ArrayList<List>进行排序[重复]【英文标题】:Sorting an ArrayList<List> in Java [duplicate] 【发布时间】:2017-02-09 01:23:29 【问题描述】:我有一个ArrayList<List>
,其中List
s 具有包含名称的字符串值,然后将双精度转换为字符串。
例子:
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
吗?为什么将name
和value
存储在同一个列表中?
列表将包含两个以上的项目,我想知道基于相关变量的名称顺序。
你的描述(key
,value
对)非常适合Map
...查找HashMap
。
@BryceD 看看这个:***.com/questions/780541/…
【参考方案1】:
在自定义实现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));
【讨论】:
是的。固定的。谢谢【参考方案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>进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章