問題:我有一個接口類型列表,我需要在存儲到數據庫之前將其轉換為數據庫 DTO 列表。我是 Java 8 流和映射函數的新手,所以任何幫助都會很棒。研究:我嘗試在 map 中使用 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() 中遇到編譯問題。我該如何解決這個問題?此外,任何關于這是否是在這種情況下轉換列表的良好設計模式的任何建議也會很棒。
1 回答

瀟湘沐
TA貢獻1816條經驗 獲得超6個贊
您需要apply創建的函數為:
List<DBAnimalDTO> dbAnimals = animals.stream().map(animal -> {
if (animal instanceof Dog) {
return dogFunction.apply((Dog) animal);
} else {
return catFunction.apply((Cat) animal);
}
}).collect(Collectors.toList());
另一方面,在DBAnimalDTO類中使用構造函數:
public DBAnimalDTO(String dbName) {
this.dbName = dbName;
}
您可以更新您的功能更清潔:
Function<Dog, DBAnimalDTO> dogFunction = dog -> new DBAnimalDTO(dog.getName());
Function<Cat, DBAnimalDTO> catFunction = cat -> new DBAnimalDTO(cat.getName());
添加回答
舉報
0/150
提交
取消