java四大函数式接口
- Consumer :消费型接口 无返回值 void accept(T t);
- Supplier :供给型接口 T get()
- Function<T,R> :函数型接口 R apply(T t)
- Predicate :断言型接口 boolean test(T t)
1、消费性接口
@Test
void test02(){
eatBun(20,x -> System.out.println("一口气吃下"+x+"个包子"));
}
//吃包子方法
public void eatBun(Integer num,Consumer<Integer> con){
con.accept(num);
}
//输出结果
一口气吃下20个包子
2、供给型接口
@Test
void test03(){
List<Integer> product = product(10, () -> (int) (Math.random() * 100));
for (Integer integer : product) {
System.out.println(integer);
}
}
//产生指定个整数,放入集合
public List<Integer> product(int num, Supplier<Integer> sup){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
list.add(sup.get());
}
return list;
}
//输出结果
72 54 18 39 94 7 28 67 42 15
3、函数型接口
@Test
void test04(){
//处理字符串
String hello = strHandler("hello", x -> x.toUpperCase());
System.out.println(hello);
}
public String strHandler(String str, Function<String,String> fun){
return fun.apply(str);
}
//输出结果
HELLO
4、断言型接口
@Test
void test05(){
List<String> list = Arrays.asList("a","ab","abc","abcd","abcde","abcdef");
List<String> strings = strFilter(list, (x) -> x.length() > 1 && x.length() < 5);
System.out.println(strings);
}
public List<String> strFilter(List<String> list, Predicate<String> pre){
List<String> result = new ArrayList<>();
for (String s : list) {
if (pre.test(s)){
result.add(s);
}
}
return result;
}
//输出结果
[ab, abc, abcd]