博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lambda表达式
阅读量:4230 次
发布时间:2019-05-26

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

以前,我们处理一个可以公用的业务逻辑的时候,一般都是先创建一个接口,接口标明要实现的功能,要传入的参数,返回的结果。

对于具体的业务逻辑,我们一般有两种方法:1写一个实现类,然后new这个现实类使用

2直接在使用中写匿名类。

两种方法都有很多缺点,写实现类,需要大量的代码,而且需要从外部导入,写匿名类的话,如果匿名类内部逻辑 太长,对造成代码不易阅读,很影响业务结构。

这种情况下就产生 了Lambda表达式,Lambda表达式可以用很简洁的语言来写接口的逻辑。

因为Lambda表达式并不事先指明使用的接口的方法,由系统自动判断,所以接口有且只能有一个方法。

(第一部分) ->{第二部分}

第一部分未接口方法的入参,可以不指明类型,会自动判断,第二部分为返回结果,如果一句话可以解决的,可以不加括号,多句话的需要加括号,切要显示指明,

返回的结果。

看例子1:

接口:

public interface ILambda {    String getString(int a,String b);}
测试:

public class LambdaTest {    public static void main(String[] args){        ILambda iLambda=(a,b)->a+b;//实现了该接口        String result=iLambda.getString(100,"test");        System.out.println(result);    }}
100test

例子2(有多句处理逻辑的):

public class LambdaTest {    public static void main(String[] args){        ILambda iLambda=(a,b)->{StringBuilder stringBuilder=new StringBuilder();                                stringBuilder.append("System say:");                                stringBuilder.append(a);                                stringBuilder.append(b);                                return stringBuilder.toString();};        String result=iLambda.getString(100," number!");        System.out.println(result);    }}
System say:100 number!

方法引用:

方法引用可以简化Lambda表达式

方法引用主要有三类:

(1)指向静态方法的方法引用,例如:(Integer::parseInt)

(2)指向任意类型实例方法的方法引用,例如:(String::length)

(3)指向现有对象的实例方法的引用,例如:(value::getValue)

第二种和第三种容易糊涂,其实第二种是Lambda表达式类部的实例,可以不用显示指出,第三种是外部的实例,内部无法

找到,所以要显示指出。

栗子:

public class Lambda{    public static String getString(int a, String b) {        StringBuilder stringBuilder=new StringBuilder();        stringBuilder.append("System say:");        stringBuilder.append(a);        stringBuilder.append(b);        return stringBuilder.toString();    }}

public class Lambda1 implements ILambda{    @Override    public String getString(int a, String b) {        return "System say: "+a+b;    }}
public class LambdaTest {    public static void main(String[] args){        ILambda iLambda=Lambda::getString;//静态方法        String result=iLambda.getString(100," number!");        System.out.println(result);        Lambda1 lambda1=new Lambda1();        ILambda iLambda1=lambda1::getString;//非静态方法        String result1=iLambda1.getString(200," number!");        System.out.println(result1);    }}
System say:100 number!
System say: 200 number!

java8中新添加了很多函数式接口(只有一个方法的接口),我们要使用Lambda表达式的时候可以去找相关接口,基本都有,不用自己去创建一个。

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

你可能感兴趣的文章
Pro JSP 2, Fourth Edition (Expert's Voice in Java)
查看>>
Microsoft SQL Server 2005 Reporting Services 2005
查看>>
User Mode Linux(R) (Bruce Perens Open Source)
查看>>
Enterprise JavaBeans 3.0 (5th Edition)
查看>>
Eclipse 3 Live
查看>>
Java P2P Unleashed: With JXTA, Web Services, XML, Jini, JavaSpaces, and J2EE
查看>>
Java(TM) Network Programming and Distributed Computing
查看>>
Java Cookbook
查看>>
Intelligent Agent Software Engineering
查看>>
Project Management Training
查看>>
Microsoft Reporting Services in Action
查看>>
Successful Software Development (2nd Edition)
查看>>
How to Design Programs: An Introduction to Programming and Computing
查看>>
Beginning Relational Data Modeling, Second Edition
查看>>
Winternals Defragmentation, Recovery, and Administration Field Guide
查看>>
Video Conferencing over IP : Configure, Secure, and Troubleshoot
查看>>
Pro ASP.NET 2.0 Website Programming
查看>>
Disassembling Code : IDA Pro and SoftICE
查看>>
Building Online Communities With Drupal, phpBB, and WordPress
查看>>
C# 2.0 : The Complete Reference
查看>>