【问题标题】:Filter an ArrayList to between two dates将 ArrayList 过滤到两个日期之间.. Android Studio [关闭]
【发布时间】:2020-11-25 19:20:49
【问题描述】:

我有一个 ArrayList“列表”

Receipts{
int invoice;
String date;
double amount;
....
}

我想将列表排序到日期之间。

public List<Receipts> sortListByDate(String date1,String date2,List<Receipts> receipts){

   List<Receipts> sortedList = new ArrayList<>();

  // if receipts.date() is between(or including) date1 and date2 then sortedList.add(that object)

  return sortedList;
}

receipt.date() , date1 和 date2 的格式为 String "dd-MM-yyyy"

帮我排序【完成“sortListByDate”功能】

【问题讨论】:

  • 你有什么问题?
  • 如何将数组列表排序到两个日期之间?
  • “排序”实际上是指“过滤器”吗?还是真的需要排序?

标签: java android date sorting arraylist


【解决方案1】:

receipts的流中,您需要根据日期过滤元素(即不在date1之前而不是在date2之后),对结果流进行排序,将其收集到List中并返回一样。

步骤:

  1. 使用DateTimeFormatter 解析日期字符串。
  2. receipts 创建一个流并使用所需条件应用filter
  3. 对结果流进行排序。
  4. 将生成的流收集到List 并返回。

代码:

public List<Receipts> sortListByDate(String date1, String date2, List<Receipts> receipts) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
    LocalDate localDate1 = LocalDate.parse(date1, formatter);
    LocalDate localDate2 = LocalDate.parse(date2, formatter);

    return receipts.stream()
            .filter(e -> !LocalDate.parse(e.date(), formatter).isBefore(localDate1)
                    && !LocalDate.parse(e.date(), formatter).isAfter(localDate2))
            .sorted()
            .collect(Collectors.toList());
}

【讨论】:

    【解决方案2】:

    你可以在 Receipts 类中实现 Comparable 并通过任何你想要的东西覆盖 compareTo 方法 然后在你的列表中调用排序方法 有关如何执行此操作的更多信息,请参阅文档: https://www.javatpoint.com/Comparable-interface-in-collection-framework

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多