Java排序Arraylist并返回排序后的列表

Ced*_*oza 4 java sorting arraylist

你好我想在这样的日期属性返回一个ArrayList的排序答案

public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
    return o1.getStartDate().compareTo(o2.getStartDate());
}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我该如何返回排序后的列表而不是返回整数... 我需要的只是一种方法,我将其传递给列表,然后返回排序后的列表。

就我而言,列表中有很多项目,我不知道是否可以比较所有项目并进行相应排序。

提前致谢。

Noo*_*waz 6

你可以这样

List<MyClass> unsortedList=...
List<MyClass> sortedList = unsortedList.stream()
            .sorted((MyClass o1, MyClass o2) -> o1.getStartDate().compareTo(o2.getStartDate()))
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

可以使用更简短的形式

List<MyClass> sortedList = unsortedList.stream()
                .sorted((o1,o2) -> o1.getStartDate().compareTo(o2.getStartDate()))
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


Som*_*Guy 5

如果您希望将已排序的数据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;
}
Run Code Online (Sandbox Code Playgroud)

如果您还想更改原始内容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());
}
Run Code Online (Sandbox Code Playgroud)