Каков наилучший способ прочитать несколько строк, чтобы создать одну? - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь рассчитать несколько вещей на основе группы строк (из БД или CSV это не имеет большого значения).
Например: у меня есть 100 строк, каждая строка имеет Задержите поле , и я хочу получить averageDelay из этих 100 строк, чтобы создать ОДНУ строку с этим значением и другие данные из этих 100 строк (например, задержка превышает определенное время). 1006Я знаю, что весна может быть очень мощной, но мне здесь не хватает механики.

Мой код в основном основан на этом примере (который использует чанки) Но я только ищу хорошую структуру для начала!

Допустим, у меня естькласс InitialLine :

public class InitialLine{

    private String feedID;
    private LocalDate dateTime;
    private Integer delay;


    /* Proper getters and setters here */

}

И finalLine :

public class finalLine implements Serializable{

    private String feedId;
    private LocalDate dateTime;
    private Float averageDelay;
    // Delay greater than 100 second
    private Integer delayGT100;
    // Delay greater than 200 second
    private Integer delayGT200;

    /* Proper getters and setters here */

}

Будет ли мой ItemReader выглядеть примерно такэто:

public class initialLineReader extends ItemReader<List<InitialLine>>{

    /* Declaration here*/

    private FilesUtils fu;

    @Override
    public List<InitialLine> read(){
        List<InitialLine> lines = fu.readInitialLines();
         return listFlux;
    }

    /* Other stuff*/

} 

с FileUtils , работающим следующим образом:

public class FilesUtils {

    /* Declaration here */

    /* Here we are using a CSV file but it will be connected to DB after*/
    public List<InitialLine> readInitialLines() {
        try {
            if (CSVReader == null) initReader();


            // What should I put here ? 
            // Read every line with .readNext() and stacking it inside a List<InitialLine> ?


            String[] line = CSVReader.readNext();
            if (line == null) return null;
            return new LineFluxCapacity();
        } catch (Exception e) {
            logger.error("Error while reading line in file: " + this.fileName);
            return null;
        }
    }

    /* Other stuff here*/
}

Я думаю, что обычно чанки работают так:
- Reader: Read ONE item
- Процессор: преобразование ONE item в ONE item
- Writer: запись MULTIPLE элементов одновременно

Но можем ли мы реализовать что-то чистое, работая так:
- Считыватель: Чтение МНОЖЕСТВО Элемент / строка
- Процессор: Преобразование МНОЖЕСТВО Элемент / строка ONE line
- Writer: Запись ONE line

...