函数式接口 作用:
(1)是Lambda表达式的使用前提
(2)概念层面,为了表示接口就代表这个抽象方法,所以将名起为函数式接口
Consumer :消费型接口
void accept(T t);
Supplier :供给型接口
T get();
Function<T,R> :函数型接口
R apply(T t);
Predicate :断言型接口(判断型接口)
boolean test(T t);
public class CoreFunctionTest {
//Consumer<T> :消费型接口
@Test
public void test1(){
consume(100,e -> System.out.println("消费了:"+e+"元"));
}
public void consume(double b , Consumer<Double> con){
con.accept(b);
}
//Supplier<T> :供给型接口
@Test
public void test2(){
List<Integer> list = getList(10, () -> (int)(Math.random()*100));
for (Integer i : list) {
System.out.println(i);
}
}
//需求:产生指定个数的整数,并放入集合中
public List<Integer> getList(int num, Supplier<Integer> su){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer a = su.get();
list.add(a);
}
return list;
}
//Function<T,R> :函数型接口
@Test
public void test3(){
String str = handleStr("\t\t\tHello world!",s -> s.trim());
System.out.println(str);
}
//需求:用于处理字符串
public String handleStr(String str, Function<String,String> fu){
String s = fu.apply(str);
return s;
}
//Predicate<T> :断言型接口
@Test
public void test4(){
List<String> list = Arrays.asList("Hello","world","test","hi");
List<String> strList = filterStrList(list,s -> s.length() > 3 );
for (String str : strList) {
System.out.println(str);
}
}
//需求:将满足条件的字符串,放入集合中
public List<String> filterStrList(List<String> strList, Predicate<String> pre){
List<String> list = new ArrayList<>();
for (String str : strList) {
if (pre.test(str)) {
list.add(str);
}
}
return list;
}
}