从另一个给定的日期生成一个 txt 文件,其中包含排序的日期以及给定的其他两个日期之间的日期

Generate a txt file, from another given, with the dates ordered, and those between two other dates given

我正在尝试创建一种方法,给定一个输入 txt 文件和两个 LocalDate 日期,return 另一个文件的日期介于给定的和排序的两个文件之间。 我已经知道如何读取文件、创建另一个文件并在新文件中引入排序的日期。但我不知道如何确定两者之间的日期。我正在尝试使用 while 循环来做到这一点。 如果你有什么想法,能为我指明道路就太棒了。我把已有的代码给你看,谢谢。

private static File fileGenerator(String f_input, LocalDate Date1, LocalDate date2) throws FileNotFoundException, IOException {
 FileReader fr=new FileReader (f_input);
 BufferedReader br=new BufferedReader(fr);
 File f_output=new File("C:/Users/Ivan/Documents/output_file.txt");
 FileWriter fw = new FileWriter(f_ouput);
 BufferedWriter bw = new BufferedWriter(fw);

 //Here, i create a list where I will drop every line from f_input
 LinkedList<String> list = new LinkedList<String>();
 String line=null;
 while((line=br.readLine())!=null) {
    list.add(line);
 {

 //Now, I sort the list
 Collections.sort(list);

 Iterator iter = list.iterator();
 String c;
 while(iter.hasNext()){
    c=(String) iter.next();
    bw.append(c);
    bw.newLine();
    bw.flush();
 {

 br.close();
 fr.close();
 fw.close();

 return f_ouput;

谓词是表示 "is this row allowed" 的函数。要允许一行,它应该 return true.

这个谓词函数可以传递给一个集合来过滤它。

例如:

public static List<Employee> filterEmployees (List<Employee> employees,
                                            Predicate<Employee> predicate)
{
    return employees.stream()
                .filter( predicate )
                .collect(Collectors.<Employee>toList());
}

上面的例子是Java8开始的。

本文中有一个更详尽的列表: https://www.baeldung.com/java-collection-filtering

我也喜欢GoogleGuava库的Collections2.filter上面文章中提到的方法

Collection<MyClass> result = Collections2.filter(baseCollection, predicate);

当然,仍然必须编写谓词来解析文件中的日期并将它们与输入日期范围进行比较。

您需要执行以下操作:(如果您愿意,可以使用伪代码)

  1. 使用以下代码转换文件中的每个字符串:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    // for example 
    LocalDate test = LocalDate.parse(string_frm_file, formatter);
    
  2. 现在您需要比较 LocalDate(此处为测试)以查看它是否在您传递给您的方法的范围内。如果确实将其添加到要写入文件的列表中,则忽略它。

    if (date1.isBefore(test) && date2.isAfter(test)) {
        list.add(test);
    }