我必须通过添加对象来创建结果列表。
这是我的密码。
private ArrayList<Car> carsInStore ;
public boolean addCarToStore(String type, String model, String color,
int maxSpeed,int year,String plateNumber) {
for (Car car : carsInStore) {
if (car.getPlateNumber()==plateNumber) {
return false;
}
else {
carsInStore.add(new Car(type, model, color, maxSpeed,
year, plateNumber));
return true;
}
}
}我需要检查具有给定plateNumber的汽车是否已经存在于ArrayList中,如果它存在,那么将不会添加新车。
我想通过Java流执行检查。
我正在使用Java 11。
发布于 2022-05-26 07:27:29
如果您想按照注释中的建议使用流重写您的方法,您可以使用流检查是否在Car中已经存在具有给定版本号的List;如果没有,则可以将其添加到carsInStore中。
另外,要检查两个String是否相等,需要使用equals方法。==操作符检查所面对变量的内容,如果引用,则它们的内容对应于它们所指向的对象的内存地址,而不是它们所代表的实际值。
private ArrayList<Car> carsInStore;
public boolean addCarToStore(String type, String model, String color, int maxSpeed, int year, String plateNumber) {
if (carsInStore.stream()
.filter(c -> c.getPlateNumber().equals(plateNumber))
.findFirst()
.isEmpty()) {
return false;
}
carsInStore.add(new Car(type, model, color, maxSpeed, year, plateNumber));
return true;
}发布于 2022-05-26 07:28:29
您可以使用findAny()。请参考这里。
findAny()返回一个可选的对象(一个容器对象,它可能包含一个非空值)描述流的某些元素,如果流是空的,返回一个空的可选对象。stream 'findAny()‘操作的行为是显式的不确定的,它可以自由地选择流中的任何元素。同一源上的多次调用可能不会返回相同的结果。
使用Optional类检查空指针异常。
Optional<Car> result = carsInStore.stream().filter(c -> c.getPlateNumber().equals(plateNumber)).findAny();
if(!result.isPresent()){
// your logic
}发布于 2022-05-26 07:32:44
我想我明白你的问题了。您希望用流API实现替换addCarToStore方法中的addCarToStore循环:
Optional<Car> existingCar = carsInStore
.stream()
.filter(c -> c.getPlateNumber().equals(plateNumber))
.findAny();
if (existingCar.isEmpty()) {
carsInStore.add(new Car(type, model, color, maxSpeed, year, plateNumber));
}https://stackoverflow.com/questions/72388041
复制相似问题