import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
/**
* ClassName: Apple
* @Description:
* @author leegoo
* @date 2019年04月25日
*/
public class Apple {
private Color color;
private Integer weight;
public Integer getWeight() {
return weight;
}
public Apple(Color color) {
this.color = color;
}
public Apple(Color color, Integer weight) {
this.color = color;
this.weight = weight;
}
public Color getColor() {
return color;
}
@Override
public String toString() {
return "Apple{" +
"color=" + color +
'}';
}
public static List<Apple> pickCustomeColor(List<Apple> list, Predicate<Apple> pre) {
List<Apple> reuslt = new ArrayList<>();
list.forEach(e -> {
if (pre.test(e)) {
reuslt.add(e);
}
});
return reuslt;
}
public static void main(String[] args) {
List<Apple> allList = new ArrayList<>();
//增加多個蘋果(各種顏色)
allList.add(new Apple(Color.BLACK));
allList.add(new Apple(Color.RED));
allList.add(new Apple(Color.RED));
allList.add(new Apple(Color.GREE));
//挑選紅色的蘋果
// 其中pickCustomeColor()發方法 第二個參數是需要傳入Predicate 根據Predicate的解釋,參數需要傳入返回boolean(Boolean)類型的參數,Predicate泛型中,這裏我加入了Apple類型
//(Apple a) -> Color.RED.equals(a.getColor()) 這裏通過color判斷是否相等,返回的結果肯定是boolean類型
List<Apple> apples = pickCustomeColor(allList, (Apple a) -> Color.RED.equals(a.getColor()));
//結果打印 [Apple{color=RED}, Apple{color=RED}]
System.out.println("apples:"+apples);
//接下來用挑選 綠色蘋果和重量小於150g的
allList = new ArrayList<>(); //此處需要重新new一下(或者使用一個新的list對象),因爲List中保存先前的Apple對象只有一個屬性color,但是 3處的代碼卻有兩個條件判斷(color,weight),即 null 不能getWeight()
allList.add(new Apple(Color.BLACK,110));
allList.add(new Apple(Color.RED,80));
allList.add(new Apple(Color.GREE,150));
allList.add(new Apple(Color.GREE,110));
List<Apple> apple2 = pickCustomeColor(allList, (Apple a) -> Color.RED.equals(a.getColor()) && a.getWeight()<150); //3
System.out.println("apple2:"+apple2);
}
}
enum Color {
GREE, RED, BLACK, BLUE,None;
}
學習lambda01- 使用lambda Predicate處理 簡化代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.