обрабатывать данные CSV с Java 8 и потоков - PullRequest
0 голосов
/ 19 октября 2019

Я изучаю Java 8, и я пытаюсь обработать CSV-файл в Java;

List<Catalogo> catalogos = new ArrayList<>();
    try (Stream<String> lines = Files.lines(Paths.get("src\\main\\resources\\productos.csv"), Charset.forName("Cp1252"))) {
        List<String[]> data = lines.map(s -> s.split(","))
                .collect(Collectors.toList());
        createCatalog(catalogos, data);
        catalogos.forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void createCatalog(List<Catalogo> catalogos, List<String[]> data) {
    for (String[] x : data) {
        for (int i = 0; i < x.length; i++) {
            Catalogo catalogo = new Catalogo();
            catalogo.setCodigo(x[0]);
            catalogo.setProducto(x[1]);
            catalogo.setTipo(x[2]);
            catalogo.setPrecio(x[3]);
            catalogo.setInventario(x[4]);
            catalogos.add(catalogo);
        }
    }
}

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

1 Ответ

2 голосов
/ 19 октября 2019

Вы можете напрямую сопоставить свой объект, используя конструктор, который принимает все ваши атрибуты, такие как:

try...
    List<Catalogo> catalogos = lines.map(s -> s.split(","))
            .map(s -> new Catalogo(s[0], s[1], s[2], s[3], s[4]))
            .collect(Collectors.toList());
catch...

, где конструктор, основанный на существующем коде, будет иметь подпись:

Catalogo(String codigo, String producto, String tipo, String precio, String inventario)
...