Java布尔方程作为函数的参数

Java布尔方程作为函数的参数,java,boolean,Java,Boolean,让我们看看我的节目。有一些虚构的汽车模型的.txt文件 public class Car { private String model; public String getModel() { return this.model; } } public class Main { public static void Main(String[] args) { ArrayList<Car> cars = loadCars

让我们看看我的节目。有一些虚构的汽车模型的.txt文件

public class Car {
    private String model;

    public String getModel() {
        return this.model;
    }
}

public class Main {
    public static void Main(String[] args) {
        ArrayList<Car> cars = loadCars(path); //imaginary func and file
        String someModel = generateSomeModel(); //imaginart func

        for (Car c : cars) 
            if (c.getModel.equals(someModel))
                System.out.println("Hit!");

        for (Car c : cars) 
            if (!c.getModel.equals(someModel))
                System.out.println("Hit!");

    }
}

可以使用谓词接口将函数(或lambda)作为参数传递给函数:

使用谓词,可以按以下方式重写函数:

public static void printCars(Predicate<Car> filter) {
    for (Car c : cars) 
        if (filter.test(car))
            System.out.println("Hit!");
}
publicstaticvoidprintcars(谓词过滤器){
用于(c车:汽车)
if(过滤器测试(汽车))
System.out.println(“命中!”);
}
然后按以下方式传递所需的函数:

public static void printCars(Predicate<Car> filter) {
    for (Car c : cars) 
        if (filter.test(car))
            System.out.println("Hit!");
}

printCars(c->c.getModel().equals(“宝马”)

您可以使用谓词接口将函数(或lambda)作为参数传递给函数:

使用谓词,可以按以下方式重写函数:

public static void printCars(Predicate<Car> filter) {
    for (Car c : cars) 
        if (filter.test(car))
            System.out.println("Hit!");
}
publicstaticvoidprintcars(谓词过滤器){
用于(c车:汽车)
if(过滤器测试(汽车))
System.out.println(“命中!”);
}
然后按以下方式传递所需的函数:

public static void printCars(Predicate<Car> filter) {
    for (Car c : cars) 
        if (filter.test(car))
            System.out.println("Hit!");
}

printCars(c->c.getModel().equals(“宝马”)

如果您需要比较具有多个属性的汽车,只需覆盖汽车类别的equals方法

这样,您将在一个步骤中比较所有必要的属性:

List<Car> cars = //cars list
Car someCar = //bmw car
for (Car c : cars) {
    if (c.equals(someCar)) {
        System.out.println("Hit!");
    } else {
        System.out.println("Another Hit!");
    }
}
List cars=//车辆列表
Car someCar=//宝马汽车
用于(c车:汽车){
如果(c.equals(someCar)){
System.out.println(“命中!”);
}否则{
System.out.println(“又成功了!”);
}
}

如果您需要比较具有多个属性的汽车,只需覆盖汽车类别的equals方法

这样,您将在一个步骤中比较所有必要的属性:

List<Car> cars = //cars list
Car someCar = //bmw car
for (Car c : cars) {
    if (c.equals(someCar)) {
        System.out.println("Hit!");
    } else {
        System.out.println("Another Hit!");
    }
}
List cars=//车辆列表
Car someCar=//宝马汽车
用于(c车:汽车){
如果(c.equals(someCar)){
System.out.println(“命中!”);
}否则{
System.out.println(“又成功了!”);
}
}

如果您使用的是Java 8,则可以将API与以下内容结合使用:

Stream.filter
方法的参数是一个表示为lambda表达式的
谓词,在本例中是
car->someModel.equals(car.getModel())

您可以更改lambda表达式以匹配第二个示例:

cars.stream()
    .filter(c -> !c.getModel().equals(someModel))
    .forEach(c -> System.out.println("Hit!"));
将其抽象为方法的方法是传递列表、谓词,如果需要,还传递一个将对匹配元素执行某些操作的。以下是一些可以作为起点使用的代码:

public static void handleCars(
        List<Car> cars, 
        Predicate<Car> condition, 
        Consumer<Car> action) {

    cars.stream().filter(condition).forEach(action);
}
或:


如您所见,谓词和使用者可以根据您的需要而变得复杂。

如果您使用的是Java 8,则可以将API与以下内容结合使用:

Stream.filter
方法的参数是一个表示为lambda表达式的
谓词,在本例中是
car->someModel.equals(car.getModel())

您可以更改lambda表达式以匹配第二个示例:

cars.stream()
    .filter(c -> !c.getModel().equals(someModel))
    .forEach(c -> System.out.println("Hit!"));
将其抽象为方法的方法是传递列表、谓词,如果需要,还传递一个将对匹配元素执行某些操作的。以下是一些可以作为起点使用的代码:

public static void handleCars(
        List<Car> cars, 
        Predicate<Car> condition, 
        Consumer<Car> action) {

    cars.stream().filter(condition).forEach(action);
}
或:


正如您所看到的,谓词和使用者可以根据您的需要而复杂。

我现在意识到您没有将问题标记为java-8。您是使用java 8还是使用以前的版本?我现在意识到您没有将问题标记为java-8。您是使用java 8还是使用以前的版本?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-@Aryamcarthy同意,添加了缺少的部分。谢谢应该是
filter.test(car)
。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@Aryamcarthy同意,添加了缺少的部分。谢谢应该是
过滤器。测试(汽车)