Java布尔方程作为函数的参数
让我们看看我的节目。有一些虚构的汽车模型的.txt文件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
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同意,添加了缺少的部分。谢谢应该是过滤器。测试(汽车)
。