Как сохранить и загрузить массив объектов списка?

Я не знаю, как выглядят ваши данные, но, вообще говоря, вам нужно выполнить два шага:

  • преобразовать строки в фактические объекты Date
  • отфильтровать new Date():

    new Date("2018-06-12"); // -> Tue Jun 12 2018 01:00:00 GMT+0100
    new Date("2018-07-13"); // -> Fri Jul 13 2018 01:00:00 GMT+0100
    

    Фильтрация прошлых событий может быть выполнена с помощью Array.filter . Вы даете ему функцию, которая возвращает True или False, и запускает ее для каждого элемента массива. Элементы, для которых возвращенный functiuon True помещается в новый массив:

    [1, 3, 4, 6, 7].filter(number => number > 4); // -> [6, 7]
    [1, 3, 4, 6, 7].filter(number => number <= 4); // -> [1, 3, 4]
    

    Итак, чтобы фильтровать прошлые даты / время, вы просто сравниваете их с сегодняшней датой. Единственная сложность в том, что предоставление строки, такой как 2018-06-07 (только дата, без указания времени) на new Date(…), устанавливает время на текущее:

    new Date("2018-06-07"); // -> Thu Jun 07 2018 01:00:00 GMT+0100
    

    Если вам нужно сравнить только по дней, а не часов или даже минут, удобно установить время до полуночи:

    (new Date("2018-06-07")).setHours(0) // -> Thu Jun 07 2018 00:00:00 GMT+0100
    

    Итак, когда собрано:

    const data = {
      events: [
        { name: "Event 1", date: "2018-06-12" },
        { name: "Event 2", date: "2018-07-10" },
        { name: "Event 3", date: "2018-07-12" },
        { name: "Event 4", date: "2018-07-13" },
        { name: "Event 5", date: "2018-08-01" }
      ]
    }
    
    const today = (new Date()).setHours(0) // past midnight
    
    const todayAndFutureEvents = data.events.filter(event => (new Date(event.date)) >= today);
    
    console.log(todayAndFutureEvents);

    Еще одна проблема может возникнуть, если ваши события происходят в нескольких часовых поясах, но это, вероятно, выходит за рамки этого вопроса ...

0
задан m.18 26 January 2019 в 12:08
поделиться

2 ответа

Это решение проверяет EmployeeFileHandler и показывает ошибку, если, например, каталог недоступен для записи. Запустите с javac EmployeeFileHandler.java; java -ea EmployeeFileHandler, чтобы сбой при подтверждении. Убедитесь, что класс Person также сериализуем.

import java.util.*;
import java.io.*;

public class EmployeeFileHandler implements Serializable {
    public static void main(String[] args) {
        ArrayList<Employees> employees = new ArrayList<Employees>();
        for (int i = 0; i < 1000; i++) {
            employees.add(new Employees("Name" + i, "Surname" + i, "" + i, 12345678));
        }        
        writeDate(employees);

        ArrayList<Employees> employees2 = new ArrayList<Employees>();
        readData(employees2);

        assert employees.size() == employees2.size();
        for (int i = 0; i < 1000; i++) {
            Employees e = employees2.get(i);
            assert e.Name.equals("Name" + i);
            assert e.Surname.equals("Surname" + i);
            assert e.ID.equals("" + i);
            assert e.MobNo == 12345678;
        }        
    }

    public static void readData(ArrayList<Employees> listIn) {

        boolean endOfFile = false;
        Employees temp;

        try {

            FileInputStream employeesFile = new FileInputStream("employee.obf");
            ObjectInputStream employeesStream = new ObjectInputStream(employeesFile);
            temp = (Employees) employeesStream.readObject();

            while (endOfFile != true) {
                try {
                    listIn.add(temp);
                    temp = (Employees) employeesStream.readObject();
                } catch (EOFException e) {
                    endOfFile = true;
                }
            }
            employeesStream.close();
        }

        catch (FileNotFoundException e) {
            System.out.println("Employee file was not found");
        } catch (IOException e) {
            System.out.println("Employee file could not be read");
        } catch (ClassNotFoundException e) {
            System.out.println("Employee class was not found");
        }
    }

    public static void writeDate(ArrayList<Employees> employee) {

        try {
            FileOutputStream EmployeesFile = new FileOutputStream("employee.obf");
            ObjectOutputStream EmployeesStream = new ObjectOutputStream(EmployeesFile);

            for (Employees employees : employee) {
                EmployeesStream.writeObject(employees);
            }
            EmployeesStream.close();
        } catch (IOException e) {
            // System.out.println("Error occurred while saving");
            e.printStackTrace();
        }
    }
}
0
ответ дан Jeppe 26 January 2019 в 12:08
поделиться


Я проверил ваш код, но не смог найти никаких проблем.
почему бы вам не попытаться поймать Throwable и проверить его отладкой?

try { /* code */ }
catch (Throwable t) { t.printStackTrace(); }
0
ответ дан Jamie 26 January 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: