我刚刚开始使用流和 lambda,并且已经弄清楚如何使用流-lambda 而不是 for 循环。
这是我之前的方法:
public void findVehicle(){
System.out.println("Input a vehicle rego: ");
in = new Scanner(System.in);
String rego = in.nextLine();
for (int i=0; i<vehicles.size();i++){
if (vehicles.get(i).getRego().equals(rego)){
System.out.println(vehicles.get(i).toString());
return;
}
}
System.out.println("The vehicle does not exist.");
}
这就是我现在的方法:
public void findVehicle(){
System.out.println("Input a vehicle rego: ");
in = new Scanner(System.in);
String rego = in.nextLine();
vehicles.stream()
.filter(vehicle -> vehicle.getRego().equals(rego.toUpperCase()))
.forEach(System.out::println);
}
该流工作完美,但我希望它在找到并打印车辆后返回。如果找不到车辆,我希望它打印错误声明。
试试这个。
vehicles.stream()
.filter(v -> v.getRego().equals(rego.toUpperCase()))
.findFirst()
.ifPresentOrElse(
System.out::println,
() -> System.out.println("The vehicle does not exist."));
String toPrint = vehicles.stream()
.filter(v -> v.getRego().equals(rego.toUpperCase()))
.findFirst()
.orElse("The vehicle does not exist.");
System.out.println(toPrint);
这会将流过滤为仅匹配的元素,返回第一个(作为
Optional
),然后返回该值(如果存在),否则“车辆不存在”。然后打印该值(或默认值)。