Java8新特性(二)------lamda表达式

 Ø  基础讲解

  Lambda表达式是一种基于函数的编程语言,下面我们来演示一下java8中lambda表达式的运用,根据例子来分析一下java8中lambda表达式的改进。

  新建一个项目,这个项目必须是基于java8的,我使用的IDE编辑器是idea,故而配置idea的jdk环境为java8,配置如图:


  我们先来看一下传统的写法:

第一种实现方式
interface  Message{
    public  void  print(String str);
}
public class TestDemo {
    public static void main( String[] args ) {
        /**
         * 使用的是匿名内部类的方式
         */
        Message msg = new Message() {
            @Override
            public void print( String str ) {
                System.out.println(str);
            }
        };

        msg.print("hello world!");
    }
}

  我们用lambda表达式再来进行书写呢?

interface  Message{
    public  void  print(String str);
}

//定义一个统一的接口
public class TestDemo {
    public static void main( String[] args ) {
        /**
         * 使用lambda表达式的方式
         */
        Message msg=(s)-> System.out.println(s);
        msg.print("hello world!");
    }
}

  我们会发现代码明显减少了好多,那么这些代码怎么理解呢?

  详解一下吧:

   (s)->System.out.println(s)

  (语法结构:参数,名称随意->方法体)

      S-------是一个参数,这个参数名称是可以随意起的,但是有一定的要求,那就是必须与接口Message定义的print方法的参数类型一致,但是此处是可以进行声明也可以不声明,追求完美度高的用户可以进行声明。

              写法: Message msg=(String s)-> System.out.println(s);    lambda表达式

         ->: 是一个固定的写法,表示的方法指向方法体

      方法体:就是在进行早期匿名内部类实现方法的时候所编写的方法体代码。

  在使用lambda表达式的时候有一个最为重要的定义要求,那就是接口里面的方法只能存在一个。使用lambda表达式为了直接能够找到对应的方法,只能是定义一个。

  特别需要注意的是

  1、  lambda表达式最重要的目的是解决匿名内部类的问题;

  2、   想要使用lambda表达式,那么必须以接口为主,而且接口里面只能够定义一个抽象方法。

 Ø  示例说明

  比如我们以实现runnable()接口为例来进行说明

import java.text.MessageFormat;

/**
 * Created by xiaona on 2016/5/29.
 */
public class TestRunnable {
    public static void main( String[] args ) {
        new Runnable() {
            @Override
            public void run() {

                System.out.println("匿名内部类实现Runnable方法");
            }
        }.run();


        /**
         * 使用lambda表达式进行实现
         */
        int i=1;
        Runnable r=()->{
            System.out.println("用lambda实现Runnable方法");
            System.out.println(MessageFormat.format("i={0}", i));
        };
        r.run();
    }
}

  除了像这样接口似得实现,我们也可以自己定义一个匿名内部类实现登录操作,同样是可以进行实现的

public class TestAction {
    public static void main( String[] args ) {
        new Action(){
            @Override
            public void execute( String content ){
            System.out.println(content);
        }
        }.execute("java8之前实现的登录的操作");

        Action  login=(content)-> {System.out.println(content);};
        login.execute("java8实现的登录操作");
    }

    static  interface Action{
        void execute(String content);
    }
}

  细心的我们会发现,使用lambda表达式与匿名类的不同在于不仅仅是代码变得简洁了,还有就是匿名类编译完毕的class文件是有$符号,而使用lambda表达式是没有的。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值