小白入门级,此博客纯属自己记笔记用!!!
1.函数型接口Function
参数类型T,返回类型R
只有一个方法的接口才能是函数式接口,Function类只有apply()方法
示例
使用匿名内部类,直接new Function接口,重写apply()方法。传入参数为一个字符串,返回字符串长度。使用Lambda表达式简写:
Function<String,Integer> function = (String s) -> {return s.length()};
只有一个参数,可以省略参数类型和括号
Function<String,Integer> function = s -> {return s.length();};
2.断定型接口Predicate
参数类型T,返回类型boolean,只有一个test()方法
示例:
3.消费型接口Consumer
accept()方法,参数类型T,返回为void
示例:
4.供给型接口Supplier
无参,有返回类型T
示例:
总结
这些函数接口大量使用在底层源码,这里使用Stream流计算来举例:
流是数据渠道,用于操作数据源(集合,数组)所生成的元素序列,集合讲的是数据,流讲的是计算。
假设有一堆user(Id,name,age),从这些user中查出选择出Id为偶数,年龄大于24岁,名字变大写,倒序,输出一个user。
User user1 = new User(11,"a",23);
User user2 = new User(12,"b",24);
User user3 = new User(13,"c",22);
User user4 = new User(14,"d",28);
User user5 = new User(16,"e",26);
List<User> list = Arrays.asList(user1,user2,user3,user4,user5);
select name from user where … and …and …可以达到这种效果,使用Stream流也可以:
结果:
可以看到filter里面使用了Predicate函数接口,选出Id为偶数的操作为
list.stream().filter( u->{ return u.getId() % 2 == 0;}) //u为参数代表user,这里list里面存的是user。其他的有兴趣可以详细了解Stream类。