Java 8 Потоковое создание нескольких объектов из входного файла

#java #oop #file-io #java-8 #java-stream

#java #ооп #file-io #java-8 #java-stream

Вопрос:

Я пытаюсь прочитать файл, чтобы записать параметры, которые будут переданы объектам, используя Java 8 stream.

Формат файла:

10 AA

15 ББ

20 куб. см

Должно быть создано столько же объектов, сколько и количество строк, объекты принимают эти параметры.

например, объект a = новый объект (10, AA).

В файле всегда будет максимум 3 строки.

Я дошел до того, что прочитал файл, проверил, начинается ли он с цифры, разделил его на новую строку и поместил каждую строку в список String[ ].

      List<String[]> input = new ArrayList<>();

        try {

          input =  Files.lines(Paths.get("C:\Users\ubaid\IntelliJ Workspace\Bakery\input.txt")).
                    filter(lines->Character.isDigit(lines.trim().charAt(0))).map(x-> x.split("\r?\n")).collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }

        for(String a[] : input){
            for(String s : a){
                System.out.println(s);

            }
        }
  

Комментарии:

1. В чем вопрос?

2. @Fureeish: Как создавать объекты с помощью stream и считывать параметры из файла. Это уже решено. Спасибо

Ответ №1:

Предполагая, что у вас есть:

 public class Type {
  private int number;
  private String text;
  // constructor and other methods
}
  

И файл хорошо отформатирован:

 List<Type> objs = Files.lines(path)
    .map(s -> s.split(" "))
    .map(arr -> new Type(Integer.parseInt(arr[0]), arr[1]))
    .collect(Collectors.toList());
System.out.println(objs);
  

Комментарии:

1. Или s.split(" ", 2) , чтобы не искать дополнительные вхождения разделителя.