Как взять из ArrayList переменную и назначить её в аргумент?

Рейтинг: 0Ответов: 1Опубликовано: 17.01.2023

Задание считать с файла информацию о автомобиле и потом когда считали с файла информацию назначить всё что мы считали в аргументы,считать с файла я смог а вот назначить аргументы не смог: Считывание с файла:

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

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
            String line;
            ArrayList<String> list=new ArrayList<String>();
            while((line=reader.readLine())!=null){
                if(!line.isEmpty()){
                list.add(line);
                    System.out.println(line);
            }}
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
} 

Информация в файле:

Lamborghini Huracan 2014 1.000.000
BMW M5 2012 16.000
Bugatti Chiron 2016 3.300.000
VAZ 21099 2007 1.000

Класс автомобиль:

public class Vehicle {
    private String make;
    private String model;
    private int yearOfManufacture;
    private int cost;

    public void setCost(int cost) {
        this.cost = cost;
        if (cost <= 0) {
            throw new IllegalArgumentException("Поле вартості автомобіля дорівнює нулю або менше нуля.");
        }
    }

    public void setMake(String make) {
        this.make = make;
        if (make.isEmpty()) {
            throw new IllegalArgumentException("Пусте поле виробника.");
        }
    }

    public void setModel(String model) {
        this.model = model;
        if (model.isEmpty()) {
            throw new IllegalArgumentException("Пусте поле моделі.");
        }
    }

    public void setYearOfManufacture(int yearOfManufacture) {
        this.yearOfManufacture = yearOfManufacture;
        if (yearOfManufacture<=0) {
            throw new IllegalArgumentException("Поле дати виготовлення дорівнює нулю або менше нулю.");
        }
    }

    public int getCost() {
        return cost;
    }

    public int getYearOfManufacture() {
        return yearOfManufacture;
    }

    public String getMake() {
        return make;
    }

    public String getModel() {
        return model;
    }

    Vehicle(String make, String model, int cost, int yearOfManufacture) {
        if (make.isEmpty()) {
            throw new IllegalArgumentException("Пусте поле виробника.");
        }
        if (model.isEmpty()) {
            throw new IllegalArgumentException("Пусте поле моделі.");
        }
        if (yearOfManufacture<=0) {
            throw new IllegalArgumentException("Поле дати виготовлення дорівнює нулю або менше нулю.");
        }
    }
}

Ответы

▲ 0Принят

Нужно распарсить полученные строки, преобразовать нужные элементы в требуемый тип (строка или целое число). Также имеет смысл создать конструктор в классе Vehicle, чтобы сразу принимать все аргументы:

// Vehicle
public Vehicle(String make, String model, int year, int cost) {
    this.make = make;
    this.model = model;
    this.yearOfManufacture = year;
    this.cost = cost;
}

Парсинг в данном простом случае можно выполнить при помощи разбиения по пробелам (пробелы в названии изготовителя или модели не допускаются):

List<Vehicle> cars = new ArrayList<>();

for (String line : list) {
    String[] p = line.split("\\s+");
    Vehicle v = new Vehicle(p[0], p[1], Integer.parseInt(p[2]), Integer.parseInt(p3.replaceAll("\\.", "")));
    cars.add(v);
}

или же при помощи Stream API:

List<Vehicle> cars = list.stream() // Stream<String>
    .map(s -> s.split("\\s+"))     // Stream<String[]>
    .map(p -> new Vehicle(p[0], p[1], Integer.parseInt(p[2]), Integer.parseInt(p3.replaceAll("\\.", "")))) // Stream<Vehicle>
    .collect(Collectors.toList());