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

原创 2016年05月30日 15:59:10

 Ø  基础讲解

  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表达式是没有的。
版权声明:本文为博主原创文章,未经博主允许不得转载。

jdk8新特性-亮瞎眼的lambda表达式

jdk8之前,尤其是在写GUI程序的事件监听的时候,各种的匿名内部类,大把大把拖沓的代码,程序毫无美感可言!既然java中一切皆为对象,那么,就类似于某些动态语言一样,函数也可以当成是对象啊!代码块也...
  • goldenfish1919
  • goldenfish1919
  • 2014年04月01日 18:00
  • 7537

【Java8】JDK8.0新特性—Lamda表达式

转自:http://blog.sina.com.cn/s/blog_4a157f470102v903.html
  • robinjwong
  • robinjwong
  • 2015年06月16日 00:04
  • 1386

Java8新特性——Lambda表达式(一)

1. 预备知识在了解Lambda表达式之前首先需要了解以下预备知识。1.1 如何成为一名高级码农?如果老板让你写一个用于毁灭地球的函数,而你写了一个毁灭行星的函数,若要毁灭地球只需将毁灭地球的过程传递...
  • u010425776
  • u010425776
  • 2016年08月27日 11:49
  • 3586

【Java8】JDK8.0新特性—Lamda表达式

转自:http://blog.sina.com.cn/s/blog_4a157f470102v903.html
  • robinjwong
  • robinjwong
  • 2015年06月16日 00:04
  • 1386

java8新特性-Lamda表达式

Lamda表达式属于函数式编程的概念,为甚需要函数式编程呢?如果想知道函数式编程产生的目的,那么我们可以且必须通过匿名内部类来分析。  普通的匿名内部类如下: public class TestC...
  • zhengyang7754
  • zhengyang7754
  • 2017年04月05日 22:30
  • 279

java8新特性-Lamda表达式

Lamda表达式属于函数式编程的概念,为甚需要函数式编程呢?如果想知道函数式编程产生的目的,那么我们可以且必须通过匿名内部类来分析。    public class TestClass { ...
  • zhengyangzkr
  • zhengyangzkr
  • 2017年08月05日 13:34
  • 187

java8新特性 函数式编程 Lamda

简介 函数式编程核心:以处理数据的方式处理代码。 相比较命令式编程的优点: 1. 代码更加简洁优雅,效率更高  2. 避免了对变量的显式修改和赋值  3. 函数式风格的代码可...
  • hua_faded
  • hua_faded
  • 2017年12月04日 11:40
  • 39

java1.8新特性之Lamda表达式

Lamda属于函数式编程的概念,那么为什么需要函数式的编程呢?如何要想清楚函数式编程的产生目的,那么我们必须通过匿名内部类来分析。传统的内名内部类:package com.wonglar.demo;i...
  • Speed_Pig
  • Speed_Pig
  • 2017年05月11日 15:10
  • 199

Java8新特性——Lambda表达式(二)Stream语法详解

1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and para...
  • WangQYoho
  • WangQYoho
  • 2016年08月25日 18:15
  • 388

java8新特性(二):Lambda表达式

一、什么是Lambda表达式     上一篇中已经看到了Lambda表达式的使用场景,这一篇深入学习一下Java8的这个新特性。      首先Lambda说一下表达式的定义:它是一个简洁的可以用于传...
  • sunjin9418
  • sunjin9418
  • 2016年10月30日 18:02
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java8新特性(二)------lamda表达式
举报原因:
原因补充:

(最多只允许输入30个字)