Java对ArrayList进行排序并返回已排序的列表。

9

你好,我正在尝试按照日期属性返回已排序的ArrayList,就像这个答案中所示。

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

我的问题是如何返回一个排序后的列表,而不是返回一个整数... 我需要的只是一个方法,我传递我的列表,然后它就会返回一个排序后的列表。
在我的情况下,列表中有许多项,我不知道是否可能比较所有项并相应地对其进行排序。
提前感谢。

3
Collections.sort(yourList, new CustomComparator()) - Eran
1
嗨@Eran,您能否提供一些示例?谢谢。 - Ceddy Muhoza
所以你看了答案,但一次都没有看过问题?这将向你展示如何使用CustomComparator - Tom
@C.B 我的评论包含了你所需的所有代码(除了你已经有的CustomComparator类)。 - Eran
方法 compare 用于比较两个对象以进行已有的排序。必须重写它才能实现自定义排序(就像您正在尝试的那样)。您只需要调用 list.sort(new CustomCoperator()) 即可。 - SomeJavaGuy
显示剩余2条评论
3个回答

10

你可以这样做。

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

7

如果您希望排序后的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());
}

-1

在实现Comparator接口后,您需要调用

      // sort the list
      Collections.sort(list);

对列表进行排序的方法。 请参见此处此处的示例。


这不会返回一个已排序的列表。Collections.sort(List<T>) 会就地对提供的列表进行排序。 - itachi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接