有一個名單A與財產開發商。開發架構喜歡那樣:如何將具有屬性的列表轉換爲另一個列表java 8的方式?
@Getter
@Setter
public class Developer {
private String name;
private int age;
public Developer(String name, int age) {
this.name = name;
this.age = age;
}
public Developer name(String name) {
this.name = name;
return this;
}
public Developer name(int age) {
this.age = age;
return this;
}
}
與性能列表A:
List<Developer> A = ImmutableList.of(new Developer("Ivan", 25), new Developer("Curry", 28));
它需要轉換列表A到列表B與財產ProductManager和性質是一樣的列表A的那些
@Getter
@Setter
public class ProductManager {
private String name;
private int age;
public ProductManager(String name, int age) {
this.name = name;
this.age = age;
}
public ProductManager name(String name) {
this.name = name;
return this;
}
public ProductManager name(int age) {
this.age = age;
return this;
}
}
在過去,我們會寫出這樣的代碼:
public List<ProductManager> convert() {
List<ProductManager> pros = new ArrayList<>();
for (Developer dev: A) {
ProductManager manager = new ProductManager();
manager.setName(dev.getName());
manager.setAge(dev.getAge());
pros.add(manager);
}
return pros;
}
我們如何使用Java 8以更優雅簡潔的方式編寫上述代碼?
這裏真正的問題是,爲什麼'Developer'和'ProductManager'不似乎從一個封裝了'name'和'age'的公共超類'Person'繼承。在你升級到漂亮的Java8鈴聲和哨聲之前,你應該可以讓設計正確。 –
@JimGarrison是的,我同意你的看法,我需要更多地關注基本面。如果有更多的屬性,也許超過20,並且構造函數不能直接使用,如何轉換? – Ivan
如果'Developer'和'ProductManager'有一個共同的基類Person,定義了所有公共屬性,那麼在兩個類中定義一個帶有Person參數的構造函數都沒有問題。這些構造函數只會委託給執行這個工作的'Person'基類的構造函數,所以它只能被實現一次。請注意,這是一種已建立的模式,即所有標準的'Collection'類型都提供了一個構造函數來接受要從中複製的'Collection'參數。 – Holger