当前位置: 首页 > 后端技术 > Java

java.util.function包详解-Lambda

时间:2023-04-01 16:50:23 Java

大家有什么问题或者意见可以在评论区回复。欢迎大家一起讨论学习。java.util.function包中有43个函数接口,但实际上只有四类:ConsumersConsumersSuppliersSuppliersFunctionsPredicatespredicate1.Consumers是一个对象,BiConsumer两个对象实际操作的是传入的T实体公共接口Consumer{publicvoidaccept(Tvar1);}Consumerprinter=s->System.out.println(s);//或Consumerprinter=System.out::println;publicinterfaceBiConsumer{voidaccept(Tvar1,Uvar2);}2.Supplierreturns对于一个T类型的对象,没有输入参数实际创建一个T实体并返回一个操作publicinterfaceSupplier{Tget();}SupplierbankAccountSupplier=()->newBankAccount();//或者SupplierbankAccountSupplier=BankAccount::new;3.Function实际对T类型的实体进行相应的操作,返回R类型的实体);//或FunctionamtFunction=BankAccount::getBalance;4.Predicate判断实体T是否满足约束,返回booleanpublicinterfacePredicate{booleantest(Tt);}Predicatetest=bankAccount->bankAccount.getBalance()>10;//customPredicatep=newPredicate(){@Overridepublicbooleantest(Strings){returns.length()<20;}};p=s->s.length()<20;System.out.println(p.test("你好12321321321321312321321"));5.还有一些其他类型的intPredicate,intFunction,intConsumer,需要指定入参为int和intToDoubleFunction,入参为int,返回参数为doublepublicinterfaceIntFunction{Rapply(intvalue);}publicinterfaceLongToDoubleFunction{doubleapplyAsDouble(longvalue);}可以自定义Predicate接口、标准验证和自定义方法、静态方法等@FunctionalInterfacepublicinterfacePredicate{publicbooleantest(Tt);公共默认Predicateand(Predicateother){returnt->test(t)&&other.test(t);}publicdefaultPredicateor(Predicateother){返回t->测试(t)||其他测试(t);}//静态方法第一种publicstaticPredicateisEqualsTo(Stringstring){returns->s.equals(string);}//还可以写成另一种publicstaticPredicateisEqualsTo(Uu){returns->s.equals(u);}}publicclassMain{publicstaticvoidmain(String[]args){Predicatep1=s->s.length()<20;Predicatep2=s->s.length()>5;布尔b=p1.test("你好");System.out.println("Helloisshorterthan20charsis:"+b);输出:Helloisshorterthan20charsis:truePredicatep3=p1.and(p2);System.out.println("p3测试123:"+p3.test("123"));System.out.println("p3测试123456:"+p3.test("123456"));System.out.println("p3test123456789012345678901:"+p3.test("123456789012345678901"));输出:p3test123:falsep3test123456:truep3test123456789012345678901:falsePredicatep4=p1.or(p2);System.out.println("p4测试123:"+p4.test("123"));System.out.println("p4测试123456:"+p4.test("123456"));System.out.println("p4test123456789012345678901:"+p4.test("123456789012345678901"));输出:p4test123:truep4test123456:truep4test123456789012345678901234567890123456789012345678901:truePredicates(YESPredicates=YESPredicatesEqualispredicates=YES");System.out.println("p5测试是:"+p5.test("YES"));System.out.println("p5testNO:"+p5.test("NO"));输出:p5testYES:truep5testNO:false}}