我們繼續來做一些lambda的研究,在第一節中我給大家介紹了一些lambda表達式條件篩查的方法,顯然有些同學認爲這並不太符合複雜場景的使用,也顯得不夠面向對象化。我們再來看看如何更簡潔的應用lambda。
看看下面這段代碼
這是Car類
package yick.demo.lambda02;
import java.io.Serializable;
public class Car implements Serializable{
private String carNo;
private String carName;
private Color carColor;
public Car() {
}
public Car(Color color, String carNo, String carName) {
this.carNo=carNo;
this.carColor=color;
this.carName=carName;
}
public String getCarNo() {
return carNo;
}
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public String getCarName() {
return carName;
}
public void setCarName(String carName) {
this.carName = carName;
}
public Color getCarColor() {
return carColor;
}
public void setCarColor(Color carColor) {
this.carColor = carColor;
}
}
這是Car顏色的枚舉類
package yick.demo.lambda02;
public enum Color {
RED,GREEN,YELOOW;
}
這是咋們測試的方法
public interface AppFilter {
boolean accept(Car car);
}
/**
* 條件過濾
*
* @param carList
* @param appFilter
*/
public static List<Car> filter(List<Car> carList, AppFilter appFilter) {
List<Car> resultCars = carList.stream().filter(c -> {
return appFilter.accept(c);
}).collect(Collectors.toList());
return resultCars;
}
public static void main(String[] args) {
List<Car> carlList = new ArrayList<Car>();
carlList.add(new Car(Color.GREEN, "001", "mazda"));
carlList.add(new Car(Color.RED, "002", "benz"));
Lambda02.filter(carlList, new AppFilter() {
@Override
public boolean accept(Car car) {
return Color.RED.equals(car.getCarColor()) && "benz".equals(car.getCarName());
}
});
}
非常一目瞭然,通過lambda的特性我們使用了一個過濾器,就大致簡單的把數組裏符合條件的汽車篩選出來,顯然比多參數傳遞更優雅,更符合面向對象的思想。
遍歷方法
Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
items.forEach((k, v) -> {
System.out.print(v + "\n");
});
List<String> list = new ArrayList<String>();
list.add("2");
list.add("2");
list.add("2");
list.add("2");
list.add("2");
list.add("2");
list.forEach(s -> {
System.out.print(s);
});