#java #java_stream
У меня есть такая сущность: public class Test { private long field; public long getField() { return field; } public void setField(long field) { this.field = field; } } Из БД мне приходит список таких объектов: ListtestList = 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; } } Listentries = 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));
Комментариев нет:
Отправить комментарий