【发布时间】:2020-07-04 20:47:54
【问题描述】:
尝试通过一个简单的示例了解 Java 8 流语法。查看了有关此主题的其他类似问题,但找不到任何与我的示例匹配且对我有用的解决方案。
我有一门课
import java.util.List;
public class Car {
private String model;
private String make;
private String carName;
private List<Specification> specification;
public Car(String model, String make, String carName, List<Specification> specification) {
this.model = model;
this.make = make;
this.carName = carName;
this.specification = specification;
}
public String getModel() {
return model;
}
public String getMake() {
return make;
}
public String getCarName() {
return carName;
}
public List<Specification> getSpecification() {
return specification;
}
}
public class Specification {
private String name;
private String value;
public String getName() {
return name;
}
public String getValue() {
return value;
}
public Specification(String name, String value) {
this.name = name;
this.value = value;
}
}
我有主要方法
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class RegisterCar {
public static void main(String[] args) throws IOException {
List<String> carNames = new ArrayList<>();
carNames.add("Audi");
carNames.add("BMW");
carNames.add("Toyota");
List<String> colour = new ArrayList<>();
colour.add("red");
colour.add("white");
}
}
我想创建一个包含每项汽车名称的汽车对象列表。但是如果汽车名称是“Audi”或“BMW”,它应该只创建一个类的对象,如下所示
List<Car> carList = new ArrayList<>();
Specification musicSystem = new Specification("MusicSysten" , "present");
List<Specification> specList= new ArrayList<>();
specList.add(musicSystem);
carList.add(new Car("Q5", "2020", "Audi", specList));
carList.add(new Car("X2", "2020", "BMW", specList));
但如果项目是“Toyota”,那么它应该为每种颜色创建两个对象。
List<Specification> specListRed= new ArrayList<>();
specListRed.add(musicSystem);
specListRed.add(redColor);
List<Specification> specListWhite= new ArrayList<>();
specListWhite.add(musicSystem);
specListWhite.add(whiteColor);
carList.add(new Car("Camry", "2020", "Toyota", specListRed));
carList.add(new Car("Camry", "2020", "Toyota", specListWhite));
我正在尝试编写一种通用方法来创建对象并添加到列表中。我已经尝试过这样的事情,但我不会为 Toyota 创建正确的两个对象。
carList = carNames.stream()
.map(carName -> new Car(model, make, carName, specList))
.collect(Collectors.toList());
请建议我如何通过流实现这一点。
【问题讨论】:
-
不适合使用流。
-
可以考虑使用
Collection.nCopies并注意理解 difference to aforloop。
标签: java list java-8 nested java-stream