#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; } } 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));
Комментариев нет:
Отправить комментарий