Java Lambda 表达式的几各形式

一、Lambda表达式的组成主要有传入参数列表(参数1,参数2,...),箭头 ->,及返回值,可以是某个值,或者结构体。

如下举一个小小的例子:

在没有使用Lambda表达式时:

import java.util.stream.Stream;

/**
 *
 * @author Kangjun
 */
public class Demo {
    public static void  main(String[] args){
        Dog dog1 = new Dog("dog1",2);
        Dog dog2 = new Dog("dog2",1);
        Dog dog3 = new Dog("dog3",3);

        Dog[] dogs = {dog1,dog2,dog3};
        printDogs(dogs);

        Arrays.sort(dogs, new Comparator<Dog>(){

            @Override
            public int compare(Dog t, Dog t1) {
                return t.getWeight()-t1.getWeight();
            }

        });

        printDogs(dogs);

    }

    public static void printDogs(Dog[] dogs){
        for(Dog d : dogs){
            System.out.println(d);
        }
        System.out.println();
    }
}

加入了Lambda表达式后可以写成(下面以3种方法实现):

import java.util.stream.Stream;

/**
 *
 * @author Kangjun
 */
public class Demo {
    public static void  main(String[] args){
        Dog dog1 = new Dog("dog1",2);
        Dog dog2 = new Dog("dog2",1);
        Dog dog3 = new Dog("dog3",3);

        Dog[] dogs = {dog1,dog2,dog3};
        printDogs(dogs);

       // Arrays.sort(dogs,(m,n)->m.getWeight()-n.getWeight()); //Lambda方法一
        //Arrays.sort(dogs,(Dog m,Dog n)->Integer.compare(m.getWeight(), n.getWeight()));//Lambda方法二
        //printDogs(dogs);

        //方法三
        Stream<Dog> dogStream = Stream.of(dogs);
        Stream<Dog> sortedDogStream = dogStream.sorted((Dog m, Dog n) -> Integer.compare(m.getWeight(), n.getWeight()));

        sortedDogStream.forEach(d -> System.out.print(d));

    }

    public static void printDogs(Dog[] dogs){
        for(Dog d : dogs){
            System.out.println(d);
        }
        System.out.println();
    }
}

看完后是不是很激动。

下面再放几个例子,参才其实现方式:

import java.util.Arrays;

/**
 *
 * @author Kangjun
 */
public class StandardSyntaxLambda {
   private static final String[] arr = {"program", "creek", "is", "a", "java", "site"};

    public static void main(String[] args){
        Arrays.sort(arr, (String a,String b) -> Integer.compare(a.length(), b.length()) );
        System.out.println(Arrays.toString(arr));
    }
}
import java.util.Arrays;

/**
 *
 * @author Kangjun
 */
public class ParameterTypeInferredLambda {
    private static final String[] arr = {"program", "creek", "is", "a", "java", "site"};

    public static void main(String[] args){
        Arrays.sort(arr,(m,n) -> Integer.compare(m.length(), n.length()));
        System.out.println(Arrays.toString(arr));
    }
}
import java.util.Arrays;

/**
 *
 * @author Kangjun
 */
public class MultipleLinesCodeLambda {
    private static final String[] arr = {"program", "creek", "is", "a", "java", "site"};

    public static void main(String[] args){
        Arrays.sort(arr,(String m,String n) -> {
            return m.length() - n.length();
        });

        System.out.println(Arrays.toString(arr));
    }
}
import java.util.stream.Stream;

/**
 *
 * @author Kangjun
 */
public class SingleParameterInferredTypeLambda {

    private static final String[] arr = {"program", "creek", "is", "a", "java", "site"};

    public static void main(String[] args) {
        Stream<String> arrStream = Stream.of(arr);
        Stream<String> sortedStream = arrStream.sorted((a, b) -> a.length() - b.length());
        sortedStream.forEach(x -> System.out.println(x));
    }

}
时间: 2024-10-01 22:30:45

Java Lambda 表达式的几各形式的相关文章

Java Lambda表达式入门[转]

原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示例程序 Examples.zip .原文日期: 2014年4月16日 翻译日期: 2014年4月27日翻译人员: 铁锚简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要

Java Lambda表达式入门

原文链接: Start Using Java Lambda Expressions 下载示例程序 Examples.zip . 原文日期: 2014年4月26日 翻译日期: 2014年4月27日 翻译人员: 铁锚 简介 (译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.) Lambda表

Java Lambda表达式forEach无法跳出循环的解决思路

Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导致的,看下面的例子: public static void main(String[] args) { List<String> list = Lists.newArrayList(); list.add("a"); list.add("b"); list.

使用Java lambda表达式实现Flink WordCount

本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.9.0</version> </dependency> <de

java lambda表达式学习笔记

lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射人先射马,擒贼先擒王.学习一个库要学习它的入口类.lambda的入口类是Stream,一看Stream中的函数就会发现Function,Predicate等lambda元素. 一.几个概念     函数式接口 Functional Interface,除了static和default类型的方法外,只有一个函数

Java Lambda 表达式的奇幻之旅

JDK 8 对 Lambda 函数编程的支持,浅的来说无非是引入了一些新的语法结构,是继JDK5 引入的Generics后又一项对大家编码方式的一种革新,如果你不跟上的话,恐怕过段时间,你会认为Java代码成了火星语.深的来说,Java是在语言级进一步支持多核CPU的环境下的并行处理,这在Stream API 中可见一斑,在Java之前,已经有很多主流语言,像 C#和C++,支持Lambda 函数编程,此次Java引入Lambda支持也算后知后觉了. 想在Java中书写Lambda的代码,有两个

Java Lambda表达式 实现原理分析

https://blog.csdn.net/qq_37960603/article/details/85028867 在类编译时,会生成一个私有静态方法+一个内部类. 在内部类中实现了函数式接口,在实现接口的方法中,会调用编译器生成的静态方法. 在使用lambda表达式的地方,通过传递内部类实例,来调用函数式接口方法. 原文地址:https://www.cnblogs.com/eryun/p/12149841.html

java lambda表达式

ArrayList<String> list = new ArrayList<String>(); list.add(0, "b"); list.add(1, "a"); list.add(0, "c"); list.add(1, "d"); ITopable<String> sortDesc = ((strList) -> { String tmp = null; for (Stri

【Java学习笔记之三十一】详解Java8 lambda表达式

Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出.Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码.这样有时可读性更好,表达更清晰.在Java生态系统中,函数式表达与对面向对象的全面支持是个激动人心的进步.将进一步促进并行