Java排序Arraylist并返回排序列表[重复]
Posted
技术标签:
【中文标题】Java排序Arraylist并返回排序列表[重复]【英文标题】:Java sort Arraylist and return sorted list [duplicate] 【发布时间】:2016-06-13 16:22:24 【问题描述】:您好,我正在尝试返回一个按日期属性排序的 Arraylist,例如 answer
public class CustomComparator implements Comparator<MyObject>
@Override
public int compare(MyObject o1, MyObject o2)
return o1.getStartDate().compareTo(o2.getStartDate());
我的问题是如何返回排序列表而不是返回整数... 我需要的只是一个方法,我将它传递给我的列表,然后它返回一个排序列表。
在我的情况下,我的列表中有很多项目,我不知道是否可以比较所有项目并相应地对它们进行排序。
提前致谢。
【问题讨论】:
Collections.sort(yourList, new CustomComparator()) 嗨@Eran你能发一些例子吗,谢谢 所以您阅读了答案,但没有看过问题?它向您展示了如何使用这个CustomComparator
。
@C.B 我的评论包含您需要的所有代码(除了您已经拥有的 CustomComparator 类)
方法compare
用于比较两个对象以进行已经可行的排序。它必须被覆盖才能实现自定义排序(就像你正在尝试的那样)。您只需拨打list.sort(new CustomCoperator())
【参考方案1】:
你可以这样做。
List<MyClass> unsortedList=...
List<MyClass> sortedList = unsortedList.stream()
.sorted((MyClass o1, MyClass o2) -> o1.getStartDate().compareTo(o2.getStartDate()))
.collect(Collectors.toList());
可以是更短的形式
List<MyClass> sortedList = unsortedList.stream()
.sorted((o1,o2) -> o1.getStartDate().compareTo(o2.getStartDate()))
.collect(Collectors.toList());
【讨论】:
【参考方案2】:如果您希望将排序后的List
与原始的分开,请这样做。
/**
* @param input The unsorted list
* @return a new List with the sorted elements
*/
public static List<Integer> returnSortedList(List<Integer> input)
List<Integer> sortedList = new ArrayList<>(input);
sortedList.sort(new CustomComparator());
return sortedList;
如果您还想更改原始List
,只需在原始实例上调用它即可。
public static void main(String[] args)
ArrayList<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(23);
list.add(50);
list.add(3);
list.add(20);
list.add(17);
list.sort(new CustomComparator());
【讨论】:
【参考方案3】:实现 Comapararator 接口后,你必须调用
// sort the list
Collections.sort(list);
对列表进行排序的方法。 请参阅示例 here 和 here。
【讨论】:
这不会返回排序列表。Collections.sort(List<T>)
对提供的列表进行就地排序。以上是关于Java排序Arraylist并返回排序列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章
创建对象的列表/数组列表并对列表进行排序(Java)[重复]