11.四大函数式接口
感谢秦疆老师的JUC并发编程视频,更多了解哔哩哔哩搜索【狂神说Java】。
本文内容源于秦疆老师的JUC并发编程视频教程。给狂神推荐,点赞吧!
函数式接口:只有一个方法的接口
- lambada表达式 链式编程 函数式接口 Stream计算
- 超级多FunctionalInterface
- 简化编程模型,在新版本的框架底层大量应用!
- foreach(消费者类的函数式接口)
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
Funcation函数式接口 : 有一个输入参数,有一个输出
传入参数T,返回参数R
- Function 函数型接口, 有一个输入参数,有一个输出
- 只要是函数型接口 可以用 lambda表达式简化
package function;
import java.util.function.Function;
public class FunctionTest1 {
public static void main(String[] args) {
Function function = new Function<String, String>() {
@Override
public String apply(String str) {
return str;
}
};
//简化lambda
Function<String, String> lambdaFunction = (str) -> {
return str;
};
System.out.println(function.apply("字符串"));
System.out.println(lambdaFunction.apply("lambda字符串"));
}
}
/******************输出结果********************
字符串
lambda字符串
****************************************/
Predicate 断定型接口:有一个输入参数,返回值只能是 布尔值!
- 断定型接口:有一个输入参数,返回值只能是布尔值!
package function;
import java.util.function.Predicate;
public class PredicateTest1 {
public static void main(String[] args) {
Predicate<String> predicate = new Predicate<String>() {
@Override
//判断字符串是否为空
public boolean test(String s) {
return s.isEmpty();
}
};
//lambda表达式简化
Predicate<String> lambdaPredicate = (str) -> {
return str.isEmpty();
};
System.out.println(predicate.test(""));
System.out.println(lambdaPredicate.test(" "));
}
}
/******************输出结果********************
true
false
****************************************/
Consumer 消费型接口:只有输入,没有返回值!
- Consumer 消费型接口:只有输入,没有返回值!
package function;
import java.util.function.Consumer;
public class ConsumerTest1 {
public static void main(String[] args) {
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
Consumer<String> lambdaConsumer =(str)->{
System.out.println(str);
};
consumer.accept("asd");
lambdaConsumer.accept("asd");
}
}
//输出
asd
asd
Supplier 供给型接口: 没有参数,只有返回值
- Supplier 供给型接口: 没有参数,只有返回值
package function;
import java.util.function.Supplier;
public class SupplierTest1 {
public static void main(String[] args) {
Supplier supplier = new Supplier() {
@Override
public Integer get() {
System.out.println("get()方法");
return 200;
}
};
Supplier lambdaSupplier = () -> {
System.out.println("get()lambda方法");
return 200;
};
System.out.println(supplier.get());
System.out.println(lambdaSupplier.get());
}
}
//输出
get()方法
200
get()lambda方法
200