【问题标题】:Java sort Arraylist and return sorted list [duplicate]Java排序Arraylist并返回排序列表[重复]
【发布时间】: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())

标签: java sorting arraylist


【解决方案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);
      

      对列表进行排序的方法。 请参阅示例 herehere

      【讨论】:

      • 这不会返回排序列表。 Collections.sort(List&lt;T&gt;) 对提供的列表进行就地排序。
      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      相关资源
      最近更新 更多