关闭

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

291人阅读 评论(3) 收藏 举报
分类:

 Ø  基础讲解

  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表达式是没有的。
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:199156次
    • 积分:8058
    • 等级:
    • 排名:第2500名
    • 原创:218篇
    • 转载:39篇
    • 译文:0篇
    • 评论:1813条
    博客专栏
    EJB

    文章:4篇

    阅读:2944
    hibernate

    文章:8篇

    阅读:6526
    最新评论