`
干宝周
  • 浏览: 14625 次
社区版块
存档分类
最新评论

JDK8 里的 lambda使用

 
阅读更多

JDK8里最引人注意的,就是lambda表达式了。很有意思,也很简单的特性。

lambda表达式在别的语言里已经非常成熟了,解决的主要问题是程序员普遍“懒”的问题~

不说话,直接上代码吧。 跑完代码里的程序,也能知道lambda的使用了

 

public class LambdaExample {
    void foo() {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Virat", "Kohli"));
        personList.add(new Person("Arun", "Kumar"));
        personList.add(new Person("Rajesh", "Mohan"));
        personList.add(new Person("Rahul", "Dravid"));

        // JDK8之前,使用匿名函数解决这个问题
Collections.sort(personList, new Comparator<Person>() {
            public int compare(Person p1, Person p2) {
                return p1.firstName.compareTo(p2.firstName);
            }
        });

        // JDK8 之后,可以用lambda表达式
Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));

        /**
         * 新增的Function函数, Person是输入,String是输出
*/
Function<Person, String> wacb = a -> {
            return "kkdd" + "cc";
        };

        // 也可以不用"{}" 包含起来. 最后一行的结果,默认作为返回值
Function<Person, String> waca = a -> "kkdd" + "cc";

        // 遍历
for (Person person: personList) {
           // System.out.println(person);
System.out.println(person.printCustom(waca));
        }

        /**
         * 可以遍历
*/
personList.forEach(p->System.out.println(p.toString() + " kkkkaaa"));

        /**
         * Predicate用来进行集合过滤
*/
Predicate<Person> startsWithAPerson = p->p.firstName.startsWith("A");
        personList.forEach(p-> {
            if (startsWithAPerson.test(p)) {
                System.out.println("starts with A:" + p);
            }
        });

        /**
         * 如果只有一个方法,可以加上默认函数编程
*/
Runnable runner = () -> {
            System.out.println("I am lambda runner.");
        };
        runner.run();

        MyInterfaceA myInterface = (String s) -> {
            System.out.println(" I am in myInterface" + s);
        };

        MyInterfaceB myInterfaceB = () -> {
        };

        myInterface.a("kk");

        List<Person> ps = new ArrayList<>();
        Random r = new Random();
        for (int i=0; i<10;i++){
            ps.add(new Person("firstname"+i, "lastname"+i, r.nextInt(30) + 1));
        }
        // 过滤条件>18Predicate<Person> adults = p -> p.getAge() > 18;

        //最小年龄
OptionalInt minAge = ps.parallelStream().filter(adults)
          .mapToInt(p -> p.getAge()).min();
        System.out.println("最小年龄:" + minAge.getAsInt());

        // 18岁以上的平均值
OptionalDouble average =
          ps.parallelStream().filter(adults)
            .mapToDouble(p -> {
                return p.getAge();
            }).average();

        System.out.println("平均年龄:" + average.getAsDouble());

    }

    public static void main(String[] args) {
        new LambdaExample().foo();;
    }

    class Person {
        String firstName;
        String secondName;
        int age;

        Person(String f, String s) {
            this.firstName = f;
            this.secondName = s;
        }

        Person(String f, String s, int age) {
            this.firstName = f;
            this.secondName = s;
            this.age = age;
        }

        @Override
public String toString() {
            return "Person{" +
              "firstName='" + firstName + '\'' +
              ", secondName='" + secondName + '\'' +
              '}';
        }

        public int getAge() {
            return age;
        }

        public String printCustom(Function<Person, String> f) {
            return f.apply(this);
        }
    }

    // 理论上来说,当这个接口只有一个函数时,才可以用lambda函数
interface MyInterfaceA {
        void a(String a);
    }

    // 犹豫 bb 是默认函数
interface MyInterfaceB{
        void b();

        // default关键字,给接口带了默认实现
default void bb(String s) {
        }

        // 这种Object里默认的函数,也不会影响是否可以使用lambda函数
boolean equals(Object obj);
        String toString();
    }

    class ClassB implements  MyInterfaceB {
        @Override
public void b() {  }

        public void bb() {  }
    }
}
0
0
分享到:
评论

相关推荐

    Jdk 8 lambda 表达式使用示范

    Java 8 是一个重要的版本更新,它引入了许多新特性,其中最引人注目的就是Lambda表达式和Stream API。这两个特性极大地提升了Java处理集合数据的能力,使得代码更加简洁、高效。接下来,我们将深入探讨Lambda表达式...

    JDK8特性(Lambda表达式+StreamAPI简单示例代码)

    JDK8特性(Lambda表达式+StreamAPI的简单使用示例代码)

    jdk1.8 Lambda表达式

    Java 8 引入的 Lambda 表达式是 Java 编程语言的重大变革之一,它允许以更简洁的方式表示单方法接口的实现,极大地增强了 Java 语言的表达能力,尤其是结合了函数式接口、Stream API 和其他新特性后。接下来,我们将...

    jdk8官方文档

    Java Development Kit (JDK) 8是Java编程...对于想要深入学习和使用JDK 8的开发者来说,这是一个不可或缺的资源。只需解压文件`jdk-8u151-docs-all`,打开`api`文件夹中的`index.html`,即可开始探索JDK 8的广阔世界。

    jdk8帮助文档(jdk8_API)

    这个压缩包“jdk8_API”包含了JDK 8的官方帮助文档,它是开发者理解和使用JDK 8的重要参考资料。 首先,JDK 8最显著的变化之一是Lambda表达式。这是一种简洁的匿名函数形式,可以作为参数传递或用作返回值。Lambda...

    JDK8 中文帮助文档(jdk api 1.8 google.CHM)

    为了支持Lambda,JDK8定义了一些新的函数式接口,如`Function,R&gt;`、`Consumer&lt;T&gt;`、`Supplier&lt;T&gt;`、`Predicate&lt;T&gt;`等,这些接口都只有一个抽象方法,是Lambda表达式的载体。 **3. 方法引用和构造器引用** 除了...

    jdk8中文手册

    JDK 8最重要的特性之一就是引入了Lambda表达式,它使得函数式编程在Java中变得更加简洁。Lambda表达式可以被用作方法参数,可以实现接口中的单个抽象方法,简化了匿名内部类的使用。例如,`Function`、`Predicate` ...

    jdk8免安装版

    在这个“jdk8免安装版”中,我们拥有的是已经解压并可以直接使用的JDK8版本,无需进行常规的安装过程。 首先,让我们了解一下JDK8的主要特性: 1. **lambda表达式**:这是JDK8最显著的改变之一,它简化了处理函数...

    jdk8中文说明文档_CHM.zip jdk1.8文档 jdk1.8说明文档

    JDK 8中文说明文档提供了详尽的指南,帮助开发者理解和使用这个版本的各种功能。 1. **Lambda表达式**:JDK 8最大的亮点之一就是引入了Lambda表达式,它使得函数式编程风格在Java中成为可能。Lambda允许将匿名函数...

    jdk 8 免费下载 / jdk8.zip

    本篇文章将详细介绍JDK 8的关键特性和使用方法。 1. **Lambda表达式**:这是JDK 8最显著的新特性之一,它允许函数式编程风格的代码编写。Lambda表达式可以作为参数传递,也可以作为返回值。它们简化了匿名内部类的...

    jdk8 新特性stream 和lambda表达式Demo

    在`jdk8Demo`的示例中,你会看到如何将Stream API和Lambda表达式结合,优雅地处理集合数据,实现数据过滤、转换和聚合等功能。这两个特性不仅让Java代码更简洁,而且提高了代码的可读性和可维护性,是Java开发者必须...

    JDK8U202.zip

    1. **Lambda表达式**:JDK 8引入了Lambda表达式,这使得编写简洁、高效的多线程代码成为可能。Lambda允许将函数作为一个对象传递,简化了对集合的处理和事件驱动编程。 2. **方法引用和构造器引用**:这是与Lambda...

    jdk8_api文档

    这个文档详细介绍了JDK 8中包含的所有类、接口、枚举和注解,为开发者提供了全面的函数库信息,使得理解和使用Java 8的功能变得更为简单。 1. **Lambda表达式**:JDK 8引入了lambda表达式,这是一种简洁的匿名函数...

    JDK8 API 中文 文档.CHM

    1. **Lambda表达式**:JDK8引入了lambda表达式,这是一种简洁的匿名函数表示方式,使得函数式编程风格在Java中变得可能。Lambda表达式可以作为参数传递,也可以用作返回值,极大地简化了对集合的处理和多线程编程。 ...

    jdk8、jkd8中文手册

    1. **Lambda表达式**:JDK8引入了Lambda表达式,使得函数式编程风格在Java中变得更为简洁。Lambda允许将匿名函数作为参数传递,或者直接定义为方法的返回值,简化了多线程处理和集合操作。 2. **函数式接口**:为了...

    jdk8压缩包.zip

    2. **Lambda表达式**:这是JDK 8中最显著的新特性之一,它允许开发者以更简洁的语法处理函数式编程。Lambda表达式可以作为方法参数,可以被赋值给变量,也可以作为返回值。它们简化了对集合的流操作,提高了代码的...

    jdk8安装包下载地址.zip

    JDK8是Oracle公司发布的一个重要版本,它在2014年3月发布了第一个正式版,至今仍被广泛使用。JDK8引入了许多新特性,提升了开发效率和代码质量,对于Java开发者来说是必备的工具。 一、JDK8的主要新特性: 1. ...

    JDK8(Linux版本).zip

    7. **类型注解**:JDK8增强了注解的使用,允许在类型参数、类型通配符、类型变量以及数组上使用注解。 8. **并行GC的改进**:在JDK8中,垃圾收集器进行了优化,例如G1(Garbage First)垃圾收集器成为服务器模式下...

    jdk8中文API文档

    Lambda表达式是JDK 8最具代表性的新特性,它简化了函数式编程,允许开发者用更简洁的方式处理匿名函数。例如,你可以使用lambda表达式来定义Runnable接口的实现,如下所示: ```java Runnable r = () -&gt; System....

    jdk8各平台64位压缩包合集

    - **Lambda表达式**: JDK 8引入了Lambda表达式,使得函数式编程风格在Java中变得更为简洁和易读,特别是在处理集合时。 - **方法引用和构造器引用**: 这些新特性允许直接引用已有方法或构造器,简化了代码并提升了...

Global site tag (gtag.js) - Google Analytics