使用java8的排序列表[重复]
Posted
技术标签:
【中文标题】使用java8的排序列表[重复]【英文标题】:sorting list of using java8 [duplicate] 【发布时间】:2020-08-28 01:36:51 【问题描述】:我有一个类似ArrayList<DateFrequency>
的列表
private static ArrayList<DateFrequency> getUnsortedDateFrequencyList()
ArrayList<DateFrequency> list = new ArrayList<>();
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") );
我需要排序列表
05/10/2020, "30-DAYS"
05/10/2020, "60-DAYS"
05/11/2020, "30-DAYS"
05/11/2020, "90-DAYS"
05/12/2020, "60-DAYS"
【问题讨论】:
尝试使用比较器。 解决方案取决于DateFrequency
是什么。
很基本的东西已经在很多地方解释过了。在要求获得好答案之前进行搜索,比任何人都可以在这里输入新答案更快。 I downvoted because research must be done to ask a good question.
不要将日期和频率作为字符串保存在对象中。使用LocalDate
作为日期,使用int
或一些枚举类型作为频率;你也可以考虑Period
。当您需要呈现数据时,您始终可以以用户友好的方式格式化数据。
【参考方案1】:
您可以使用 java 8 流来实现,如下所示。
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
【讨论】:
问题不在于字符串列表。 我没有收到像 05/10/2020、“30-DAYS”这样的订单 05/10/2020、“60-DAYS” 05/ 2020 年 11 月,“30 天” 2020 年 5 月 11 日,“90 天” 2020 年 5 月 12 日,“60 天” @SubrahmanyamGuntupalli - 我假设记录只需要按日期排序,而不是按频率排序。这是正确的假设吗?【参考方案2】:-
使用DateTimeFormatter 创建所需的模式,以便您可以将日期字符串解析为LocalDate。
使用Comparator 比较解析日期字符串上的
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
。
仅需要按升序对日期进行排序。
【讨论】:
我需要按频率和日期列出顺序以上是关于使用java8的排序列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java8使用Stream流实现List列表的查询统计排序分组