Es gibt eine Liste A mit der Eigenschaft Entwickler. Entwickler-Schema mag das:Wie konvertiert man eine Liste mit Eigenschaften in eine andere Liste der Java 8-Wege?
@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;
}
}
Liste A mit den Eigenschaften:
List<Developer> A = ImmutableList.of(new Developer("Ivan", 25), new Developer("Curry", 28));
Es gefordert Liste A zu konvertieren B zur Liste, die mit Eigentum Produktmanager und die Eigenschaften sind das gleiche wie das der Liste 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;
}
}
In den alten Tagen, würden wir Codes wie schreiben:
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;
}
Wie können wir das obige mit Java 8 eleganter und kurzer schreiben?
Die eigentliche Frage hier ist, warum 'Developer' und' ProductManager' nicht scheinen von einer gemeinsamen Oberklasse "Person" zu erben, die "name" und "Alter" einkapselt. Bevor Sie auf die cleveren Java8-Glöckchen upgraden, sollten Sie das Design wahrscheinlich richtig machen. –
@JimGarrison Ja, ich stimme Ihnen zu, ich muss mehr auf die Grundlagen achten. Wenn es mehr Eigenschaften gibt, vielleicht mehr als 20, und der Konstruktor kann nicht direkt verwenden, wie konvertiert man? – Ivan
Wenn 'Developer' und' ProductManager' eine gemeinsame Basisklasse, 'Person', hatten, die alle allgemeinen Eigenschaften definiert, gab es kein Problem, einen Konstruktor mit einem' Person' Parameter in beiden Klassen zu definieren.Diese Konstruktoren würden nur an den Konstruktor der Basisklasse "Person" delegieren, die die Arbeit erledigt, also muss sie nur einmal implementiert werden. Beachten Sie, dass dies ein etabliertes Muster ist, d. H. Alle Standard-Collection-Typen stellen einen Konstruktor bereit, der ein Argument "Collection" akzeptiert, aus dem kopiert werden soll. – Holger