博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Lambda表达式、Consumer、Function、BinaryOperator、Predicate、Supplier、UnaryOperator接口
阅读量:3968 次
发布时间:2019-05-24

本文共 4959 字,大约阅读时间需要 16 分钟。

Lambda表达式、

Main.java

package Lambda表达式;public class Main {
public String message="你好"; public static void main(String[]argv){
/* 功能性接口:只有一个抽象方法 */ greet(new ConsolePrinter()); //使用匿名类 greet(new Printer() {
@Override public void print(String message) {
System.out.println("使用匿名类"+message); } }); //lambda表达式 greet((String message) -> {
System.out.println("Lambda表达式"+message); }); //定义lambda表达式 Printer lambdaPrinter=message -> {
System.out.println(message);}; lambdaPrinter.print("helloworld"); //lambda执行体中的this为当前所执行lambda表达式的对象实体 //使用方法引用 greet(message -> System.out.println(message)); greet(System.out::println); //自定义 greet(message -> print(message)); greet(Main::print); //静态方法 //gree(类名::方法名) //实体方法 //gree(对象变量名::方法名) } public static void greet(Printer printer){
printer.print("Hello world"); } public static void print(String message){
System.out.println("方法引用"+message); }}

Printer.java

package Lambda表达式;public interface Printer {
void print(String message);}

ConsolePrinter.java

package Lambda表达式;public class ConsolePrinter implements Printer{
@Override public void print(String message) {
System.out.println(message); }}

Consumer接口

package Lambda表达式.Consumer接口;import java.util.List;import java.util.function.Consumer;public class Main {
public static int sum=0; public static void main(String[]argv){
List
list= List.of(3,4,5,6); //遍历 for(Integer num:list){
System.out.println(num); } //使用Consumer接口 list.forEach((Integer item)->{
sum+=item; System.out.println(item); }); System.out.println("sum="+sum); //定义Consumer接口:只接受参数没有返回值 Consumer
print=(Integer item)->System.out.println("print"+item); list.forEach(print); /*消费者链*/ Consumer
print1=item->System.out.println("print1+"+item); list.forEach(print.andThen(print1));// print3// print1+3// print4// print1+4// print5// print1+5// print6// print1+6 }}

Function接口

package Lambda表达式.Function接口;import java.util.function.Function;public class Main {
public static void main(String[]argv){
Function
map=(String str)->{
return str.length();}; var num=map.apply("hello"); System.out.println(num); /*有趣的实例*/ Function
replaceColon=str->str.replace(":","="); Function
addBraces=str->"{"+str+"}"; var result=replaceColon. andThen(addBraces) .apply("key:value"); System.out.println(result);//{key=value} //以相反的顺序组合函数 System.out.println(addBraces.compose(replaceColon).apply("key:value")); }}

BinaryOperator接口

package Lambda表达式.BinaryOperator接口;import java.util.function.BinaryOperator;import java.util.function.Function;public class Main {
public static void main(String[]argv){
BinaryOperator
add=(a,b)->a+b; Function
square= a->a*a; System.out.println(add.andThen(square).apply(1,2)); //(1+2)^2 }}

Predicate接口

package Lambda表达式.Predicate接口;import java.util.function.Predicate;public class Main {
public static void main(String[]argv){
Predicate
isLongerThan5=str->str.length()>5; System.out.println(isLongerThan5.test("hcv"));//false //组合谓词接口 Predicate
hasLeftBrace=str->str.startsWith("{"); Predicate
hasRightBrace=str->str.endsWith("}"); //and Predicate
hasLeftRightBrace=hasLeftBrace.and(hasRightBrace); System.out.println(hasLeftRightBrace.test("{hello}"));//true //or Predicate
hasLeftOrRightBrace=hasLeftBrace.or(hasRightBrace); System.out.println(hasLeftOrRightBrace.test("hello}"));//true //取反 hasLeftBrace.negate(); }}

Supplier接口

package Lambda表达式.Supplier接口;import java.util.function.Supplier;public class Main {
public static void main(String[]argv){
Supplier
getRandom=()->{
return Math.random();}; var random=getRandom.get(); System.out.println(random); }}

UnaryOperator接口

package Lambda表达式.UnaryOperator接口;import java.util.function.UnaryOperator;public class Main {
public static void main(String[]argv){
UnaryOperator
square=n->n*n; UnaryOperator
increment=n->n+1; var result=increment.andThen(square).apply(1); System.out.println(result);//4 //(1+1)*(1+1)=4 }}

转载地址:http://rucki.baihongyu.com/

你可能感兴趣的文章
Video for Linux Two API Specific…
查看>>
Video for Linux Two API Specific…
查看>>
V4L2 - Linux下视频驱动模型
查看>>
V4L2 - Linux下视频驱动模型
查看>>
pthread_create使用类中函数指针的…
查看>>
pthread_create使用类中函数指针的…
查看>>
实用技巧:Gdbserver远程调试的具…
查看>>
实用技巧:Gdbserver远程调试的具…
查看>>
静态成员函数调用非静态成员变量-p…
查看>>
静态成员函数调用非静态成员变量-p…
查看>>
基于ARM与DSP的智能仪器系统设计
查看>>
基于ARM与DSP的智能仪器系统设计
查看>>
微处理器中各种总线简介(转载)
查看>>
linux库知识,静态库和动态库
查看>>
linux库知识,静态库和动态库
查看>>
U-boot在开发板上移植过程详解(1)-…
查看>>
Nand Flash存储结构及控制方法(K9F…
查看>>
S3C2440与SDRAM连接浅析
查看>>
S3C2440与SDRAM连接浅析
查看>>
关于udelay(); mdelay(); ndelay()…
查看>>