函数式接口
有且只有一个抽象方法的接口
定义:一个借口定义一个抽象方法
一般作为参数和返回值类型调用
函数式编程
只管具体结果实现,不管过程如何
Lambda 延迟执行,提升性能
常用函数式接口
Supplier
生产型接口 制定接口泛型是神魔类型,接口中get就会产生什么类型 get方法
package commonuserfunc;
import java.util.function.Supplier;
public class supplierTest {
public static String getString(Supplier<String> s){
return s.get();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = getString(/*new Supplier<String>() {
@Override
public String get() {
// TODO Auto-generated method stub
return "胡歌";
}
}*/
()->"胡歌");
System.out.println(s);
}
}
Consumer
, 顾客接口 消费一个数据,其数据类型由泛型决定 其接口使用 accept 方法
Andthen()
package commonuserfunc;
import java.util.function.Consumer;
public class cinsumerTest {
public static void co(String name,Consumer<String> con,Consumer<String> con1){
con.andThen(con1).accept(name);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
co("赵丽颖", (String name)->{
//System.out.println(name)
String newname=new StringBuilder(name).reverse().toString();
System.out.println("new"+newname);
},(String na)->{System.out.println(na);} );
}
}
Predicate
对某种数据进行判断,结果返回一个布尔值 test方法判断
And
package commonuserfunc;
import java.util.function.Predicate;
public class predicateTest {
public static boolean stringPredicate(String str,Predicate<String> p1,Predicate<String> p2)
{
// return p1.test(str)&&p2.test(str);
// return p1.and(p2).test(str);
return p1.or(p2).test(str);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean b = stringPredicate(new String("abcdefg"), (String s)->{return s.length()>5;}, (String s)->{return s.contains("a");});
if(b=true){
System.out.println("字符串符合条件");
}
}
}
Function
对某种数据进行转换 apply方法
package streamTest;
import java.util.stream.Stream;
public class Maptest {
public static void main(String[] args) {
Stream<String> s=Stream.of("1","2","3","4");
//使用map方法把字符串类型的
Stream<Integer> map = s.map((String s1)->{return Integer.parseInt(s1);});
map.forEach(i->System.out.println(i));
}
}