Использование Java 8 для преобразования списка строк в список объектов - PullRequest
0 голосов
/ 04 мая 2018

Из файла читается поток, содержимое каждой строки выглядит так:

 {"uid":"5981865218","timestamp":1525309552069,"isHot":true}

Класс пользователя:

public class User {
    private String uid;
    private long timestamp;
    private boolean isHot;

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }

    public boolean getIsHot() {
        return isHot;
    }

    public void setIsHot(boolean isHot) {
        this.isHot = isHot;
    }
}

Код, который я хочу получить список объектов «Список» из файлового потока:

BufferedReader targetBr = null;
targetBr = new BufferedReader(new FileReader(targetUsersFile));
List<User> tmpUsers = targetBr.lines().?I don't know how process in there?.collect(Collectors.toList());

1 Ответ

0 голосов
/ 04 мая 2018

Вам необходимо десериализовать строку в User объекты. Я использовал Джексона ObjectMapper здесь (вы могли бы очень хорошо использовать других, таких как Gson).

ObjectMapper objectMapper = new ObjectMapper();
...
targetBr.lines()
        .map(line -> {
            try {
                return objectMapper.readValue(line, User.class);
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }).collect(Collectors.toList());

Часть потока map занимает Function, и, следовательно, вы не можете выбросить проверенное исключение оттуда. Следовательно, я обернул IOException, который Джексон readValue бросает (мог выбросить) в RuntimeException. Возможно, вам придется изменить эту часть в соответствии с вашими потребностями.

Это только начало. Подумайте о том, что делать, если существует недопустимая запись, которую нельзя десериализовать в User. Некоторые конкретные угловые случаи:

  1. Что, если во входной строке есть нераспознанное поле (свойство, которого нет в классе User). ObjectMapper в этом случае генерирует исключение UnrecognizedPropertyException. Вы можете найти способы игнорировать это.
  2. Что делать, если в строке отсутствует одно или несколько полей в классе User ... Некоторые / все они обязательны ...?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...