作者:曹伟,叩丁狼教育高级讲师。原创文章,转载请注明出处。
内置函数式接口
常用的内置函数式接口
JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景,它们主要在java.util.function包中被提供。
上面用到过的Consumer接口就是其中之一,接下来给大家介绍下其他的常用函数式接口
代码演示
public class FunctionDemo {
// 函数式接口类型 参数类型 返回类型 说明
// Consumer<T>消费型接口 T void 对类型为T的对象操作,方法:void accept(T t)
@Test
public void test1() throws Exception {
shop(10000.0, new Consumer<Double>() {
@Override
public void accept(Double money) {
System.out.println("购买电脑花费:" + money + "元");
}
});
shop(5000.0, money-> System.out.println("购买手机花费:" + money + "元"));
}
public static void shop(Double money, Consumer<Double> con) {
con.accept(money);
}
//===================================================================================
// 函数式接口类型 参数类型 返回类型 说明
// Supplier<T>供给型接口 无 T 返回类型为T的对象,方法:T get();可用作工厂
@Test
public void test2() throws Exception {
String code = getCode(4, ()-> new Random().nextInt(10));
System.out.println(code);
}
//获取指定位数的验证码
public String getCode(int num, Supplier<Integer> sup){
String str = "";
for (int i = 0; i <num ; i++) {
str += sup.get();
}
return str;
}
//===================================================================================
// 函数式接口类型 参数类型 返回类型 说明
// Function<T, R>函数型接口 T R 对类型为T的对象操作,并返回结果是R类型的对象。方法:R apply(T t);
@Test
public void test3() throws Exception {
int length = getStringRealLength(" www.wolfcode.cn ", str -> str.trim().length());
System.out.println(length);
}
public int getStringRealLength(String str,Function<String,Integer> fun){
return fun.apply(str);
}
//===================================================================================
// 函数式接口类型 参数类型 返回类型 说明
// Predicate<T>断言型接口 T boolean 判断类型为T的对象是否满足条件,并返回boolean 值。方法boolean test(T t);
@Test
public void test4() throws Exception {
List<String> list = getString(Arrays.asList("Java8","Lambda","wolfcode"), s -> s.length() > 5);
System.out.println(list);
//后面学习了Stream API操作更简单
Arrays.asList("Java8","Lambda","wolfcode").stream().filter(s -> s.length() > 5).forEach(System.out::println);
}
//获取集合中长度大于5的字符串
public List<String> getString(List<String> list, Predicate<String> pre){
List<String> newList = new ArrayList<>();
for (String string : list) {
if (pre.test(string)) {
newList.add(string);
}
}
return newList;
}
}
其他函数式接口
当然Java8中还提供了很多各种用途的函数式接口,大家可以自己去探索
可以从java.util.function包下查看所有的函数式接口