如何从流中打印匹配元素,如果不存在则使用默认值?

问题描述 投票:0回答:2

我刚刚开始使用流和 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);
}

该流工作完美,但我希望它在找到并打印车辆后返回。如果找不到车辆,我希望它打印错误声明。

java lambda java-stream
2个回答
3
投票

试试这个。

vehicles.stream()
    .filter(v -> v.getRego().equals(rego.toUpperCase()))
    .findFirst()
    .ifPresentOrElse(
        System.out::println,
        () -> System.out.println("The vehicle does not exist."));

0
投票
String toPrint = vehicles.stream()
    .filter(v -> v.getRego().equals(rego.toUpperCase()))
    .findFirst()
    .orElse("The vehicle does not exist.");

System.out.println(toPrint);

这会将流过滤为仅匹配的元素,返回第一个(作为

Optional
),然后返回该值(如果存在),否则“车辆不存在”。然后打印该值(或默认值)。

© www.soinside.com 2019 - 2024. All rights reserved.