Interface Supplier < T > 接口
-
-
参数类型
T
-结果由该供应商的类型 -
Functional Interface:
这是一个功能接口,因此可以作为赋值的目标一个lambda表达式或方法参考。
-
-
@FunctionalInterface //注解函数式接口 public interface Supplier<T>{ T get() }
Interface Consumer< T >
-
-
参数类型
T
-操作的输入类型 -
All Known Subinterfaces:
Stream.Builder
-
Functional Interface:
这是一个功能接口,因此可以作为赋值的目标一个lambda表达式或方法参考。
-
-
@FunctionalInterface public interface Consumer<T>{ void accept(T t) //在给定的参数上执行此操作。 //参数 //t -输入参数 }
使用案例
public class ConsumerDemo1 {
public static void main(String[] args) {
conString("皮城女警", new Consumer<String>() { //利用匿名内部类的方法
@Override
public void accept(String s) {
System.out.println(s);
}
});
conString("伊泽瑞尔", s -> System.out.println(s)); //Lambda表达式方法
conString("小鱼人", System.out::println); //方法引用
}
private static void conString(String s, Consumer<String> cmer) {
cmer.accept(s);
}
}
Interface Predicate< T >
-
-
参数类型
T
-谓词的输入类型 -
Functional Interface:
这是一个功能接口,因此可以作为赋值的目标一个lambda表达式或方法参考。
-
代码案例
public class PredicateDemo1 {
public static void main(String[] args) {
boolean b1 = checkString("hello", s -> s.length() > 8);
System.out.println(b1);
boolean b2 = checkString("helloworld", s -> s.length() > 8);
System.out.println(b2);
boolean b3 = checkString("hello", s -> s.length() > 8, s -> s.length() < 15);
System.out.println(b3);
}
//同一个字符串给出两个不同的判断条件,最后把这两个判断结果做逻辑与运算的结果作为最终的结果
private static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
/* boolean b1= pre1.test(s);
boolean b2= pre2.test(s);
boolean b=b1&&b2;
return b;*/
//return pre1.or(pre2).test(s); 判断逻辑或
return pre1.and(pre2).test(s);
}
//判断给定的字符串是否满足要求test方法
private static boolean checkString(String s, Predicate<String> pre) {
return pre.test(s);
//negate方法是对结果进行逻辑非的操作
//return pre.negate().test(s);
}
}
public class PredicateDmo2 {
public static void main(String[] args) {
String[] strArray = {"小鱼人,21", "张三,10", "张婉儿,40", "李青,20"};
//姓名大于2,年龄大于20
ArrayList<String> arry = checkString(strArray, s -> s.split(",")[0].length() > 2, s -> Integer.parseInt(s.split(",")[1]) > 20);
for (String str : arry) {
System.out.println(str);
}
}
//通过接口的拼装将符合要求的字符串选到集合Arraylist中
private static ArrayList<String> checkString(String[] strArray, Predicate<String> pre1, Predicate<String> pre2) {
ArrayList<String> arry = new ArrayList<>();
//遍历数组
for (String str : strArray) {
if (pre1.and(pre2).test(str)) {
arry.add(str);
}
}
return arry;
}
}
Interface Function<T,R>
-
-
参数类型
T
-功能的输入类型R
-函数的结果类型 -
All Known Subinterfaces:
UnaryOperator
-
Functional Interface:
这是一个功能接口,因此可以作为赋值的目标一个lambda表达式或方法参考。
-
apply方法第一个参数是用的 第二个是返回的类型
public class FunctionDemo1 {
public static void main(String[] args) {
convert("100", Integer::parseInt);
convert(100, s -> String.valueOf(s + 12));
convert("110", Integer::parseInt, s -> String.valueOf(s + 12));
}
//这个apply方法就是把第一个参数类型转换为第二个参数
private static void convert(String s, Function<String, Integer> fun) {
int i = fun.apply(s);
System.out.println(i);
}
//定义一个方法把一个int类型的数据加上一个整数之后,转为字符串在控制台输出
private static void convert(Integer i, Function<Integer, String> fun) {
String s = fun.apply(i);
System.out.println(s);
}
//定义一个方法,把一个字符串转换为int类型,把int类型的数据加上一个整数之后,转换为字符串输出
private static void convert(String s, Function<String, Integer> fun1, Function<Integer, String> fun2) {
Integer i = fun1.apply(s);
String ss = fun2.apply(i);
//String ss=fun1.andThen(fun2).apply(s);相当于前两步
System.out.println(ss);
}
}