1、Supplier接口
java.util.function.Supplier接口紧包含一个无参的方法:T get()
用来获取一个泛型参数制定类型的对象数据
Supplier接口被称为生产型接口,制定接口的泛型是什么类型,呢么接口中的get方法就会生产什么类型的数据
代码示例:
public static void main(String[] args) {
String str1 = getString(new Supplier<String>() {
@Override
public String get() {
return "马尔扎哈";
}
});
String str2 = getString(() -> "古力娜扎");
System.out.println(str1 + str2);
}
public static String getString(Supplier<String> supp) {
return supp.get();
}
2、 Consumer接口
java.util.function.Consumer接口正好与Supplier接口相反,不是生产数据,而是消费数据,其数据类型由泛型决定。
2.1 Consumer接口中包含抽象方法void accept(T t), 意为消费一个指定泛型的数据。
Consumer接口是一个消费型接口,泛型执行什么类型,就可以使用accept方法消费什么类型的数据,至于具体怎么消费(使用),需要自定义(输出,计算····)
代码示例:
public static void main(String[] args) {
show("古力娜扎", str -> {
String name = new StringBuilder(str).reverse().toString();
System.out.println(name);
});
}
public static void show (String str, Consumer<String> con) {
con.accept(str);
}
2.2 Consumer接口的默认方法andThen
作用:需要两个Consumer接口,可以把两个Consumer接口组合到一起,再对数据进行消费
例:
Consumer con1
Consumercon2
String s = “hello”;
con1.accept(s);
con2.accept(s);
连接两个Consumer接口,再进行消费
con1.andThen(con2).accept(s); 谁写前边谁先消费
代码示例:
public static void main(String[] args) {
show("Hello", t ->
System.out.println(t.toUpperCase()), str -> {
String name = new StringBuilder(str).reverse().toString();
System.out.println(name);
});
}
public static void show (String str, Consumer<String> con1, Consumer<String> con2) {
// con1.accept(str);
// con2.accept(str);
// 使用andThen方法连接两个Consumer接口再调用accept方法进行消费,等同于上边分别消费
con1.andThen(con2).accept(str); // con1连接con2,限制性con1消费数据,再消费con2
}
3、Predicate接口
java.util.function.Predicate接口
作用:对某种数据类型的数据进行判断,结果返回一个boolean值
3.1 Predicate接口中的抽象方法:
boolean test(T t) :用来对指定数据类型数据进行判断的方法
结果:符合条件true,不符合条件,返回false
代码示例:
public static boolean method (String str, Predicate<String> pre) {
return pre.test(str);
}
public static void main(String[] args) {
boolean result = method("asc", str -> str.length() > 5);
System.out.println(result);
}
3.2 默认方法
3.2.1 and
表示并且关系,也可以用于连接两个判断条件
代码示例:
public static boolean method (String str, Predicate<String> pre1, Predicate<String> pre2) {
// return pre1.test(str) && pre2.test(str);
return pre1.and(pre2).test(str); // 等同于上边的代码
}
public static void main(String[] args) {
boolean result = method("asvrvrc", str -> str.length() > 5, str -> str.contains("a"));
System.out.println(result);
}
3.2.2 or
表示或者关系,也可以用于连接两个判断条件
代码示例:
public static boolean method (String str, Predicate<String> pre1, Predicate<String> pre2) {
// return pre1.test(str) || pre2.test(str);
return pre1.or(pre2).test(str); // 等同于上边的代码
}
public static void main(String[] args) {
boolean result = method("asv", str -> str.length() > 5, str -> str.contains("a"));
System.out.println(result);
}
3.3.3 negate
表示取反关系
代码示例:
public static boolean method (String str, Predicate<String> pre) {
// return !pre.test(str);
return pre.negate().test(str); // 等同于上边的代码
}
public static void main(String[] args) {
boolean result = method("asv", str -> str.length() > 5);
System.out.println(result);
}
4、 Function接口
java.util.function.Function<T, R>
作用:接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。
4.1 Function接口中最主要的抽象方法为R apply(T t), 根据类型T的参数获取类型R的结果。
代码示例:
// 将一个字符串整数转换为Integer类型并返回
public static Integer method (String str, Function<String, Integer> fun) {
return fun.apply(str);
}
public static void main(String[] args) {
Integer in = method("110", str -> Integer.parseInt(str));
System.out.println(in);
}
4.2 默认方法
4.2.1 andThen
作用:用来进行组合操作
代码示例:
/*
需求:
把String类型的“123”转换为integer类型,把转换后的结果加10,
把增加之后的Integer类型的数据,转换为String类型
*/
public static String method (String str, Function<String, Integer> fun1, Function<Integer, String> fun2) {
return fun1.andThen(fun2).apply(str);
}
public static void main(String[] args) {
String result = method("110", str -> Integer.parseInt(str) + 10, i -> i.toString());
System.out.println(result);
}