java内置的函数式接口的介绍及使用
java内置的四大核心函数式接口
-
消费型接口 ---- > Consumer< T>
-
其中的抽象方法
void accept(T t);
- 传入一个参数,没有返回值 — 就好像消费了一样 ---- 所以将这个接口称之为消费型接口
-
-
供给型接口 ----> Supplier< T>
-
其中的抽象方法
T get();
- 没有传入参数,但是有一个返回值 ----- 就像是有人供给一样 ---- 所以将这个接口称之为供给型接口
-
-
函数型接口 ---->Function<T,R>
-
其中的抽象方法
R apply(T t);
- 传入一个参数,然后经过一系列的操作和运算之后返回一个值 ----- 就像是一个一元函数一样
-
-
断定型接口 -----> Predicate< T>
-
其中的抽象方法为
boolean Test(T t);
- 传入一个参数,然后根据传入的参数是否符合我们的要求返回一个boolean值 ---- 就像是对一个参数做出一个判断 ---- 所以我们将这个接口称之为断定型接口
-
关于消费型接口的使用举例:
eg:
这里我们先使用内部类的方式创建Consumer接口对象
package 函数式接口;
import java.util.function.Consumer;
public class Demo1 {
public static void main(String[] args) {
happyTime(500.0,new Consumer<Double>(){
public void accept(Double dDouble){
System.out.println("学习太累了,花了"+dDouble+"块钱买了一小份快乐");
}
});
}
public static void happyTime(double money, Consumer<Double> con){
con.accept(money);
}
}
这里我们使用lambda表达式的方式创建Consumer接口对象
package 函数式接口;
import java.util.function.Consumer;
public class Demo2 {
public static void main(String[] args) {
happyTime(400.0, money -> System.out.println("学习太累了,花了"+money+"块钱买了一小小份快乐"));
}
public static void happyTime(Double money,Consumer<Double> con){
con.accept(money);
}
}
关于使用断定型接口的使用举例: —> 筛选ArrayList< String> 对象中的带"京"的元素(带京的保留,不带京的移除掉)
eg:
首先这里我们先使用匿名内部类的方式创建Predicate接口对象
package 函数式接口;
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.List;
import java.util.ArrayList;
public class Demo3 {
public static void main(String[] args) {
List<String> list = Arrays.asList("北京","南京","西京","东京","天津","普京");
List<String> filterString = filterStrings(list,new Predicate<String>(){
public boolean test(String s){
return s.contains("京");
}
});
System.out.println(filterString);
}
public static List<String> filterStrings(List<String> list, Predicate<String> pre){
ArrayList<String> arrayList = new ArrayList<>();
for(String s : list){
if(pre.test(s)){
arrayList.add(s);
}
}
return arrayList;
}
}
这里我们使用lambda表达式的方式创建predicate接口对象
package 函数式接口;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;
public class Demo4 {
public static void main(String[] args) {
List<String> list = Arrays.asList("北京","南京","西京","东京","天津","普京");
List<String> filterString = filterStrings(list,s -> s.contains("京"));
System.out.println(filterString);
}
public static List<String> filterStrings(List<String> list , Predicate<String> pre){
ArrayList<String> list1 = new ArrayList<>();
for(String s : list){
if(pre.test(s)){
list1.add(s);
}
}
return list1;
}
}