Проблема: у меня есть список типа интерфейса, который мне нужно преобразовать в список базы данных DTO перед сохранением в базе данных.Я новичок в потоках и функциях Java 8, поэтому любая помощь будет полезна.
Исследование: я пытался использовать instanceOf в карте, но всегда получаю ошибки компиляции.
Ниже приведены различные классы и их иерархия.
public interface Animal {}
Public Class Cat implements Animal{
private String name;
public void getName() {
return name;
}
}
Public Class Dog implements Animal{
private String name;
public void getName() {
return name;
}
}
Public Class DBAnimalDTO{
private String dbName;
public void setDbName(String name) {
this.dbName = name;
}
}
Чтобы отобразить классы Dog и Cat, я создал отдельные функции.
Function<Dog, DBAnimalDTO> dogFunction = dog -> {
DBAnimalDTO dbAnimalDTO = new DBAnimalDTO();
dbAnimalDTO.setDbName(dog.getName());
return dbAnimalDTO;
}
Function<Cat, DBAnimalDTO> catFunction = cat -> {
DBAnimalDTO dbAnimalDTO = new DBAnimalDTO();
dbAnimalDTO.setDbName(cat.getName());
return dbAnimalDTO;
}
Используя потоки, которые я пробовалиспользовать различные функции карты в зависимости от типа объекта.
List<Animal> animals = new ArrayList();
List<DBAnimalDTO> dbAnimals = animals.stream().map(animal -> {
if(animal instanceOf Dog) {
return dogFunction;
} else {
return catFunction;
}
}).collect(Collectors.<DBAnimalDTO> toList());
Я всегда получаю проблему компиляции в Collectors.toList ().Как мне решить эту проблему?
Кроме того, любой совет, если это хороший шаблон проектирования для преобразования списка в этом сценарии, также был бы полезен.