当前位置:网站首页>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
}
边栏推荐
- The first white paper on agile practice in Chinese enterprises was released | complete download is attached
- TIPC addressing 2
- String (Analog
- TIPC Getting Started6
- 二叉树专题--【深基16.例7】普通二叉树(简化版)(multiset 求前驱 后继 哨兵法)
- TIPC protocol
- 2022 love analysis · panoramic report of digital manufacturers of state-owned enterprises
- Matlab processing of distance measurement of experimental electron microscope
- Rest (XOR) position and thinking
- [quick application] there are many words in the text component. How to solve the problem that the div style next to it will be stretched
猜你喜欢

webauthn——官方开发文档

Special topic of binary tree -- acwing 18 Rebuild the binary tree (construct the binary tree by traversing the front and middle order)

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

一.STM32的开发环境,keil5/MDK5.14安装教程(附下载链接)

二叉树专题--AcWing 3540. 二叉搜索树建树(实用板子 构建二叉搜索树 并输出前、中、后序遍历)

华为AppLinking中统一链接的创建和使用

JVM之垃圾回收器

TIPC addressing 2

Flick two open, realized a batch lookup join (with source code)

二叉树专题--AcWing 3384. 二叉树遍历(已知先序遍历 边建树 边输出中序遍历)
随机推荐
二.Stm32f407芯片GPIO编程,寄存器操作,库函数操作和位段操作
How does the whole network display IP ownership?
Implement custom drawer component in quick application
I STM32 development environment, keil5/mdk5.14 installation tutorial (with download link)
【ARK UI】HarmonyOS ETS的启动页的实现
OpenMLDB Meetup No.4 会议纪要
[quick application] win7 system cannot run and debug projects using Huawei ide
Rest (XOR) position and thinking
Calculate the sum of sequences
Use Huawei performance management service to configure the sampling rate on demand
TIPC messaging3
TIPC协议
【深入浅出玩转FPGA学习4----漫谈状态机设计】
[paid promotion] collection of frequently asked questions, recommended list FAQ
Binary tree topic -- Luogu p3884 [jloi2009] binary tree problem (DFS for binary tree depth BFS for binary tree width Dijkstra for shortest path)
flink二开,实现了个 batch lookup join(附源码)
JSP webshell free -- the basis of JSP
TIPC 寻址2
ImportError: cannot import name ‘Digraph‘ from ‘graphviz‘
一.STM32的开发环境,keil5/MDK5.14安装教程(附下载链接)