java内置的四大核心函数式接口:
简单来理解:
消费型接口 Consumer相当于只进不出;
供给型接口 Supplier相当于只出不进;
函数型接口 Function<T,R>相当于有进有出,且一进一出;
断定型接口 Predicate相当于给了他参数之后,他给你返回一个true或false。
使用举例:
因为函数式接口都可以用lambda表达式来表示,所以这里使用了常规表示方法和lambda表达式的表示方法两种。
/**
* java内置的4大核心函数式接口
*
* 消费型接口 Consumer<T> void accept(T t)
* 供给型接口 Supplier<T> T get()
* 函数型接口 Function<T,R> R apply(T t)
* 断定型接口 Predicate<T> boolean test(T t)
*/
public class LambdaTest2 {
@Test
public void test1(){
happyTime(500, new Consumer<Double>() {
@Override
public void accept(Double aDouble) {
System.out.println("学习太累了,去天上人间买了瓶矿泉水,价格为:" + aDouble);
}
});
System.out.println("********************");
happyTime(400,money -> System.out.println("学习太累了,去天上人间喝了口水,价格为:" + money));
}
public void happyTime(double money, Consumer<Double> con){
con.accept(money);
}
@Test
public void test2(){
List<String> list = Arrays.asList("北京","南京","天津","东京","西京","普京");
List<String> filterStrs = filterString(list, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("京");
}
});
System.out.println(filterStrs);
List<String> filterStrs1 = filterString(list,s -> s.contains("京"));
System.out.println(filterStrs1);
}
//根据给定的规则,过滤集合中的字符串。此规则由Predicate的方法决定
public List<String> filterString(List<String> list, Predicate<String> pre){
ArrayList<String> filterList = new ArrayList<>();
for(String s : list){
if(pre.test(s)){
filterList.add(s);
}
}
return filterList;
}
}
其他函数式接口
其实就是四大核心函数式接口的变种,参数和返回值的个数和类型变化了一下。
比如BiFunction<T,U,R>,由原来的的一进一出变成了两进一出。