Új hozzászólás Aktív témák

  • Csaby25

    őstag

    Sziasztok!
    A következő metódus csv file-ból olvas ki sorokat és objektummá alakítom (minden sor egy objektum):

    private static void readData(File inputFile, Class type) {

    try {
    BufferedReader reader = new BufferedReader(new FileReader(inputFile));
    String line;
    // Reading first line..
    while ((line = reader.readLine()) != null) {
    String[] values = line.split(COMMA_DELIMITER);
    if (type == Student.class) {
    Student student = populateStudent(values);

    if (students == null) {
    students = new HashMap<Integer, Student>();
    }
    students.put(student.getStudentId(), student);

    }
    if (type == Subject.class) {
    Mark mark = populateMark(values);
    Subject subject = populateSubject(values);

    if (subject.getMarks() == null) {
    subject.setMarks(new ArrayList<Mark>());
    }
    students.get(mark.getStudentId()).getSubjects().put(subject.getSubjectId(), subject);
    students.get(mark.getStudentId()).getSubjects().get(subject.getSubjectId()).getMarks().add(mark);

    }
    }
    reader.close();

    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    Ez szeretném megoldani Stream-el:

    private static void readData(Path inputFile, Class type) {
    Student student;
    Subject subject;
    Mark mark;
    try {
    Stream<String> lines = Files.lines(inputFile);

    List<List<String>> values = lines.map(line -> Arrays.asList(line.split(COMMA_DELIMITER))).collect(Collectors.toList());

    if (type == Student.class) {
    values.forEach(value -> student = populateStudent(value));

    if (students == null) {
    students = new HashMap<Integer, Student>();
    }
    students.put(student.getStudentId(), student);

    }
    if (type == Subject.class) {

    values.forEach(value -> mark = populateMark(value));

    if (subject.getMarks() == null) {
    subject.setMarks(new ArrayList<Mark>());
    }
    students.get(mark.getStudentId()).getSubjects().put(subject.getSubjectId(), subject);
    students.get(mark.getStudentId()).getSubjects().get(subject.getSubjectId()).getMarks().add(mark);

    }
    //}

    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    A forEach-ben (value -> student = populateStudent(value)) ezt a hibát kapom: ''Local variable student defined in an enclosing scope must be final or effectively final'

    Tudja valaki, hogy lehet ezt megoldani?
    Köszi!

Új hozzászólás Aktív témák

Hirdetés