使用java8的排序列表

使用java8的排序列表,java,java-8,Java,Java 8,我有一个类似于ArrayList 您可以使用Java8流来实现如下所示的相同功能 List<String> sortedList = list.stream().sorted().collect(Collectors.toList()); List-sortedList=List.stream().sorted().collect(Collectors.toList()); 用于创建所需的模式,以便可以将日期字符串解析为 用于比较解析的日期字符串上的DateFrequency对象

我有一个类似于
ArrayList


您可以使用Java8流来实现如下所示的相同功能

List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
List-sortedList=List.stream().sorted().collect(Collectors.toList());
  • 用于创建所需的模式,以便可以将日期字符串解析为
  • 用于比较解析的日期字符串上的
    DateFrequency
    对象
  • 演示:

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class DateFrequency {
        private String date;
        private String frequency;
    
        public DateFrequency(String date, String frequency) {
            this.date = date;
            this.frequency = frequency;
        }
    
        public String getDate() {
            return date;
        }
    
        @Override
        public String toString() {
            return "DateFrequency [date=" + date + ", frequency=" + frequency + "]";
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    
            List<DateFrequency> list = new ArrayList<DateFrequency>();
            list.add(new DateFrequency("05/10/2020", "60-DAYS"));
            list.add(new DateFrequency("05/10/2020", "30-DAYS"));
            list.add(new DateFrequency("05/11/2020", "30-DAYS"));
            list.add(new DateFrequency("05/12/2020", "60-DAYS"));
            list.add(new DateFrequency("05/11/2020", "90-DAYS"));
    
            // Sort on dates in ascending order
            Collections.sort(list, Comparator.comparing((df) -> LocalDate.parse(df.getDate(), formatter)));
    
            // Display the sorted result
            for (DateFrequency df : list) {
                System.out.println(df);
            }
        }
    }
    
    DateFrequency [date=05/10/2020, frequency=60-DAYS]
    DateFrequency [date=05/10/2020, frequency=30-DAYS]
    DateFrequency [date=05/11/2020, frequency=30-DAYS]
    DateFrequency [date=05/11/2020, frequency=90-DAYS]
    DateFrequency [date=05/12/2020, frequency=60-DAYS]
    
    假设:

  • 日期字符串的格式为
    dd/MM/yyyy
    。如果没有,请在对象中相应地更改它,
    formatter
  • 仅在日期按升序排序时才需要排序

  • 尝试使用比较器。解决方案取决于
    DateFrequency
    是什么。这是已经在5个地方解释过的非常基本的东西。在询问之前进行搜索,以比任何人在此处键入新答案更快地获得好答案。不要将日期和频率作为字符串保存在对象中。日期使用
    LocalDate
    ,频率使用
    int
    或某种枚举类型;你也可以考虑<代码>期限<代码>。当您需要显示数据时,您可以始终以用户友好的方式格式化数据。问题不是字符串列表。我没有收到像2020年10月5日、“30天”或2020年10月5日、“60天”或2020年11月5日、“30天”或2020年11月11日、“90天”这样的订单@SubrahmanyamGuntupalli——我假设记录只需要按日期排序,而不需要按频率排序。这是正确的假设吗?我需要按频率和日期列出顺序
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class DateFrequency {
        private String date;
        private String frequency;
    
        public DateFrequency(String date, String frequency) {
            this.date = date;
            this.frequency = frequency;
        }
    
        public String getDate() {
            return date;
        }
    
        @Override
        public String toString() {
            return "DateFrequency [date=" + date + ", frequency=" + frequency + "]";
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    
            List<DateFrequency> list = new ArrayList<DateFrequency>();
            list.add(new DateFrequency("05/10/2020", "60-DAYS"));
            list.add(new DateFrequency("05/10/2020", "30-DAYS"));
            list.add(new DateFrequency("05/11/2020", "30-DAYS"));
            list.add(new DateFrequency("05/12/2020", "60-DAYS"));
            list.add(new DateFrequency("05/11/2020", "90-DAYS"));
    
            // Sort on dates in ascending order
            Collections.sort(list, Comparator.comparing((df) -> LocalDate.parse(df.getDate(), formatter)));
    
            // Display the sorted result
            for (DateFrequency df : list) {
                System.out.println(df);
            }
        }
    }
    
    DateFrequency [date=05/10/2020, frequency=60-DAYS]
    DateFrequency [date=05/10/2020, frequency=30-DAYS]
    DateFrequency [date=05/11/2020, frequency=30-DAYS]
    DateFrequency [date=05/11/2020, frequency=90-DAYS]
    DateFrequency [date=05/12/2020, frequency=60-DAYS]