Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Как сконвертировать один объект в другой с использованием Stream API

#java #java_stream


У меня есть такая сущность:

public class Test {
    private long field;

    public long getField() {
        return field;
    }

    public void setField(long field) {
        this.field = field;
    }
}


Из БД мне приходит список таких объектов:

List testList = dao.getAll();


Также у меня есть другие объекты:

public class Entries {
    private List entry;

    public List getEntry() {
        return entry;
    }

    public void setEntry(List entry) {
        this.entry = entry;
    }
}


и

public class Entry {
    private int field;

    public int getField() {
        return field;
    }

    public void setField(int field) {
        this.field = field;
    }
}


Я хочу с помощью Stream API и операции map преобразовать список объектов Test в Entries,
т.е. поле field из объекта Test должно просетиться в поле field объекта Entry, и на
выходе должен получиться Entries, содержащий список entry. Как это можно сделать?

UPDATE:

Без стримов я бы сделал так:

Entries entries = new Entries();
List entriesList = new ArrayList<>();
for (Test test : testList) {
    Entry entry = new Entry();
    entry.setField(test.getField());
    entriesList.add(entry);
}
entries.setEntry(entriesList);

    


Ответы

Ответ 1



Объявить в Entry конструктор принимающий Test и передать его в метод map: public class Entry { private int field; public Entry(Test source) { setField(source.getField()); } public int getField() { return field; } public void setField(int field) { this.field = field; } } List entries = testList .stream() .map(Entry::new) .collect(Collectors.toList()); UPDATE: Не знаю зачем нужна обёртка Entries, но если её чуть-чуть довести до ума, то можно создавать не отходя от потока. class Entries { private List data; public Entries() { data = new ArrayList<>(); } public void addEntry(Entry entry) { data.add(entry); } public void addEntries(Entries entries) { data.addAll(entries.get()); } public List get() { return data; } } Entries entries = testList .stream() .map(Entry::new) .collect(Collector.of( Entries::new, (acc, val) -> acc.addEntry(val), (l, r) -> { l.addEntries(r); return l; }, acc -> acc));

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

Отправить комментарий