import java.util.function.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("=========================Consumer==========================");
//HashMap没有顺序,底层为HashTable 根据hashcode排序
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "alg");
map.put(2, "bbb");
map.put(4, "bsdabb");
printOut(map, x -> x.forEach((k, v) -> System.out.println(k + "->" + v)));
buy(35.6, "飞机", (x, y) -> System.out.println("我花了" + x + "元钱,买了一个" + y));
System.out.println("=========================Supplier==========================");
getList(5, () -> Math.random() * 100).forEach(System.out::println);
System.out.println("=========================Function==========================");
System.out.println(func("aoligei", String::toUpperCase));
System.out.println("=========================Predicate==========================");
List<String> list = new ArrayList<String>() {{
this.add("奥利给");
this.add("老王八");
this.add("王八");
this.add("老八");
}};
list = StrFilter(list, s -> s.contains("王")); //重新赋值
list.forEach(System.out::println);
}
//Consumer 消费型接口
//Consumer可以接收一个泛型参数 BiConsumer可以接收两个泛型参数
static void printOut(HashMap<Integer, String> map, Consumer<HashMap<Integer, String>> con) {
con.accept(map);
}
static void buy(Double money, String toy, BiConsumer<Double, String> con) {
con.accept(money, toy);
}
//Supplier 供给型接口
static List<Double> getList(int size, Supplier<Double> sup) {
List<Double> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
list.add(sup.get());
}
return list;
}
//Function 函数型接口
static String func(String str1, Function<String, String> function) { //就是自己在参数里写方法来执行
return function.apply(str1);
}
//Predicate 断言型接口
static List<String> StrFilter(List<String> list, Predicate<String> predicate) {
List<String> stringList = new ArrayList<>();
for (String str : list) {
if (predicate.test(str)) //predicate.test()判断传进来的值真假
stringList.add(str); //如果为真添加
}
return stringList; //将新的List返回
}
}
Result