package com.tianmeng.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static java.lang.Thread.currentThread;
/**
* @program: java8
* @descriptioin:
* @author: TIANMENG
* @date: 2019-11-14 22:19
**/
public class FilterApple {
//@FunctionalInterface
public interface AppleFilter{
boolean filter(Apple apple);
}
public static List<Apple> findApple(List<Apple> apples, AppleFilter appleFilter){
List<Apple> list = new ArrayList<>();
for (Apple apple : apples){
if (appleFilter.filter(apple)){
list.add(apple);
}
}
return list;
}
public static class GreenAnd160WeightFilter implements AppleFilter{
@Override
public boolean filter(Apple apple) {
return apple.getColor().equals("green") && apple.getWeight() >= 160;
}
}
public static List<Apple> findGreenApple(List<Apple> apples){
List<Apple> list = new ArrayList<>();
for (Apple apple : apples){
if ("green".equals(apple.getColor())){
list.add(apple);
}
}
return list;
}
public static List<Apple> findApple(List<Apple> apples, String color){
List<Apple> list = new ArrayList<>();
for (Apple apple : apples){
if (apple.getColor().equals(color)){
list.add(apple);
}
}
return list;
}
public static void main(String[] args) throws InterruptedException {
List<Apple> list = Arrays.asList(
new Apple("green",150),
new Apple("yellow",120),
new Apple("green",170));
// List<Apple> greenApples = findGreenApple(list);
// assert greenApples.size() == 2;
// List<Apple> greenApples = findApple(list,"green");
// List<Apple> redApples = findApple(list, "red");
// System.out.println(greenApples);
// System.out.println(redApples);
List<Apple> result = findApple(list, new GreenAnd160WeightFilter());
// System.out.println(result);
List<Apple> yellowApple = findApple(list, new AppleFilter() {
@Override
public boolean filter(Apple apple) {
return "yellow".equals(apple.getColor());
}
});
// System.out.println(yellowApple);
List<Apple> lambdaResult = findApple(list, apple -> {
return apple.getColor().equals("green");
});
// System.out.println(lambdaResult);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(currentThread().getName());
}
}).start();
new Thread(() -> {
System.out.println(currentThread().getName());
}).start();
currentThread().join();
}
}