Создайте txt-файл из другого заданного с указанием дат и двух указанных дат - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь создать метод, который, учитывая входной текстовый файл и две даты LocalDate, возвращает другой файл с датами между двумя указанными и отсортирован.Я уже знаю, как прочитать файл, создать еще один и ввести в новый файл отсортированные даты.Но я понятия не имею, как сделать даты между двумя данными.Я пытаюсь сделать это с помощью циклов 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;

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Вам необходимо выполнить следующее: (psuedocode, если хотите)

  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);
    }
    
0 голосов
/ 17 ноября 2018

Предикат - это функция, которая говорит "разрешен ли этот ряд".Чтобы разрешить строку, она должна возвращать true.

Эту функцию предиката можно передать в коллекцию для ее фильтрации.

Например:

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

Приведенный выше примерначиная с Java 8.

Вот более полный список в этой статье: https://www.baeldung.com/java-collection-filtering

Мне также нравится метод Collections2.filter библиотеки Google Guava, упомянутый в статье выше.

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

Конечно, все же предикат должен быть написан для анализа дат из файла и сравнения их с входным диапазоном дат.

...