当前位置:网站首页>Functional interfaces and method references
Functional interfaces and method references
2022-07-02 11:14:00 【Cold Snowflakes】
Lambda The expression describes , What the abstract method in the interface should do .
actual Lambda The essence is , An object of a class that implements that interface .
The composition of the interface
Constant : The default is public static final
Method : The default is public abstract
stay JAVA8 in , Added default method (public default), Static methods (public static)
stay JAVA9 in , Added private method
For Instance
public interface eatable {
// Abstract method Implementation class Must be implemented
void funAbstract();
// The default method and Static methods Both require method bodies
/** * The default method : Do not force implementation classes to override , Implementation classes can be used directly * Mainly used for interface upgrade , Without breaking existing code */
default void funDefault(){
System.out.println(" The default method ");
}
/** * Static methods in interfaces Can only be called by the interface */
static void funStatic(){
System.out.println(" Static methods ");
}
}
public static void main(String[] args) {
// Realization Abstract method And call The default method
((eatable) () -> System.out.println(" Implement abstract methods ")).funDefault();
// Realization Abstract method And call Abstract method
((eatable) () -> System.out.println(" Implement abstract methods ")).funAbstract();
// Static methods in interfaces Can only be Interface call , Cannot be called by an implementation class
eatable.funStatic(); // OK
((eatable) () -> System.out.println(" Implement abstract methods ")).funStatic(); // Error
}
Method reference ( Use the existing method logic to deal with the abstract method in the interface )
quote Class Static methods
// Parameters of abstract methods Pass all to Referenced static methods
public static void main(String[] args) {
((eatable) s -> Integer.parseInt(s)) // lambda form
.toInt("2349645");
((eatable) Integer::parseInt) // Class name :: Static methods
.toInt("23");
}
interface eatable {
void toInt(String s);
}
quote Class Non static methods
// Parameters of abstract methods Pass all to Referenced non static methods
public static void main(String[] args) {
((eatable)s -> System.out.println(s.toUpperCase()))
.toUpper("fdf");
((eatable)new linshi()::printString)
.toUpper("fsdf"); // Help object , Reference non static methods in classes
}
class linshi {
public void printString(String s){
System.out.println(s.toUpperCase());
}
}
interface eatable {
void toUpper(String s);
}
You can do that :
But pay attention to : The abstract method in the interface The parameter type of the first parameter It has to be linshi, The following parameters are passed to printString Method .
public static void main(String[] args) {
((eatable)(s,a) -> System.out.println(a.toUpperCase()))
.toUpper(new linshi(),"fgwerg");
/** * Use this Class name :: Non static methods When it comes to form * * Be careful The abstract method in the interface The parameter type of the first parameter It has to be linshi * Parameter after All to printString Method */
((eatable)linshi::printString)
.toUpper(new linshi(),"grg");
}
class linshi {
public void printString(String s){
System.out.println(s.toUpperCase());
}
}
interface eatable {
// The first parameter As a caller
void toUpper(linshi a,String s); // The second parameter Give to the printString Method as a parameter
}
Functional interface
Interface with and only one abstract method , A functional interface is lambda The premise of expression .
have access to @FunctionalInterface marked Functional interface .
Using functional interfaces As a parameter , You can pass on the past lambda expression .
public class lambdademo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<>();
array.add("ccc");
array.add("aa");
array.add("b");
array.add("dddd");
System.out.println(" Before ordering : " + array);
// Collections.sort(array); // Natural ordering
Collections.sort(array,getComparator()); // Comparator sort
System.out.println(" After ordering : " + array);
}
private static Comparator<String> getComparator(){
// Anonymous inner class mode
// return new Comparator<String>() {
// @Override
// public int compare(String s1, String s2) {
// return s1.length() - s2.length();
// }
// };
// lambda The way , Because the return value is Functional interface
return (s1,s2) -> s1.length() - s2.length();
}
}
Common functional interface
Supplier Interface
public static void main(String[] args) {
// Pass a lambda , It's actually Definition Abstract method Supplier.get The logic of
String string = getString(() -> " Brigitte Lin ");
System.out.println(string);
}
// Set interface generics here by String, Express get Method The return type is String
private static String getString(Supplier<String> sup){
return sup.get();
}
Consumer Interface
public static void main(String[] args) {
// The first parameter is The data passed
// The second parameter is Definition Abstract method accept The logic of
getString(" Xy: ",System.out::print);
}
// Generic String It specifies accept Parameter type
private static void getString(String s, Consumer<String> cn){
// cn.accept(s);
Consumer<String> t = a -> System.out.print(a.length() + 1);
cn.andThen(t).accept(s);
// cn Do it first accept(s)
// t Execute it again accept(s)
}
Predicate Interface
It is often used to judge whether parameters meet specified conditions
boolean test(T t) // Judge the given parameters , The logic of judgment consists of lambda Provide
default Predicate<T> negate()
default Predicate<T> and(Predicate other)
default Predicate<T> or(Predicate other)
public static void main(String[] args) {
boolean res = checkString("fewef", s -> s.length() > 8);
System.out.print(res);
}
private static boolean checkString(String s, Predicate<String> t){
// return t.test(s);
// return t.negate().test(s); // Not
// return t.and(a -> a.startsWith("fy")).test(s); // And
return t.or(a -> a.startsWith("fy")).test(s); // or
}
边栏推荐
- JSP webshell free -- the basis of JSP
- MTK full dump抓取
- OpenMLDB Meetup No.4 会议纪要
- PCL eigen introduction and simple use
- [quick application] win7 system cannot run and debug projects using Huawei ide
- Win11 arm system configuration Net core environment variable
- Overview of integrated learning
- Luogu p5536 [xr-3] core city (greed + tree DP looking for the center of the tree)
- 实验电镜距离测量之Matlab处理
- C# 文件与文件夹操作
猜你喜欢

How to implement tabbar title bar with list component

Special topic of binary tree -- Logu p1229 traversal problem (the number of traversals in the middle order is calculated when the pre and post order traversals of the multiplication principle are know

Win11 arm system configuration Net core environment variable

The most detailed MySQL installation tutorial

Special topic of binary tree -- acwing 19 The next node of the binary tree (find the successor of the node in the tree)

Creation and use of unified links in Huawei applinking

JVM之垃圾回收器
![二叉树专题--洛谷 P3884 [JLOI2009]二叉树问题(dfs求二叉树深度 bfs求二叉树宽度 dijkstra求最短路)](/img/c2/bb85b681af0f78b380b1d179c7ea49.png)
二叉树专题--洛谷 P3884 [JLOI2009]二叉树问题(dfs求二叉树深度 bfs求二叉树宽度 dijkstra求最短路)

如何用list组件实现tabbar标题栏

二叉树专题--AcWing 19. 二叉树的下一个节点(找树中节点的后继)
随机推荐
Verilog 和VHDL有符号数和无符号数相关运算
Thanos Receiver
static 函数中的静态变量
What are the software product management systems? Inventory of 12 best product management tools
华为应用市场应用统计数据问题大揭秘
mmrotate旋转目标检测框架使用记录
TIPC协议
How to transfer event objects and user-defined parameters simultaneously in Huawei express applications
TIPC Cluster5
二叉树专题--AcWing 3384. 二叉树遍历(已知先序遍历 边建树 边输出中序遍历)
From the perspective of attack surface, see the practice of zero trust scheme of Xinchuang
Approximate sum count (approximate
[AGC] build service 3 - authentication service example
The most detailed MySQL installation tutorial
K-d tree and octree of PCL
【深入浅出玩转FPGA学习3-----基本语法】
[AI application] Hikvision ivms-4200 software installation
Mongodb learning and sorting (condition operator, $type operator, limit() method, skip() method and sort() method)
一招快速实现自定义快应用titlebar
【云原生】2.5 Kubernetes 核心实战(下)