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)); } // 过滤条件>18岁 Predicate<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() { } } }
相关推荐
java 8 新特性lambda表达式使用DEMO,怎么使用stream api 来操作集合,collect , fiter, foreach , map等等方法的使用示范
JDK8特性(Lambda表达式+StreamAPI的简单使用示例代码)
jdk8 新特性stream 和lambda表达式Demo
自已整理完全版最长用的lambda,基中包括lamnda介绍简答实体及多线程list,map相互转换等等。
JDK8-Lambda-课程 关于JDK8中Lambda表达式的Oracle Online课程
与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。 Stream...
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 新增lambda表达式 提供函数式接口 Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用 我们可以直接在lambda表达式中访问外层...
JDK 8 Lambda和Streams MOOC:第1课作业在第1课中,我们将重点介绍使用Lambda表达式,方法引用以及已添加到现有类中的一些新方法。 您应该使用一个模板源文件来创建练习的答案,称为Lesson1.java。 为了简化操作,您...
1.Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 2.新增lambda表达式 3.提供函数式接口 4.Java 8 允许你使用关键字来传递方法或者构造函数引用 5.我们可以直接在lambda表达式中...
java-study 是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的Lambda、
java-study 是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的Lambda、10
jdk8虽然出现很久了,但是可能我们还是有很多人并不太熟悉,本文主要就是介绍说明一些jdk8相关的内容。 主要会讲解: lambda表达式 方法引用 默认方法 Stream 用Optional取代null 新的日志和时间 ...
主要介绍了JDK8新特性——Lambda表达式的相关资料,帮助大家更好的理解和学习JAVA开发,感兴趣的朋友可以了解下
jdk8新特性演示demo,主要包含lambda表达式的使用,方法引用的使用,stream流式操作的使用等演示demo,然后就么有了
使用场景:开发和面试题中都会用到,开发中合理运用Java 8新特性可以大大简化代码量,提高开发效率,在Java面试中JDK8新特性也是面试常问的热点题目,理解这些特性之后,很容易把它们说清楚,面试嘎嘎加分 ...
Oracle甲骨文公司于2015年1月15日发布了新一版JDK8,新版本加入了许多新的特性。这些特性带来了一些改变,可以很大方便Java程序的编写。新特性主要涉及:对于JDK7中Fork/Join并行处理的升级;支持Lambda表达式;添加...
Lambda 表达式也可称为闭包,是推动 Java 8 发布的最重要新特性。lambda表达式本质上是一个匿名方法。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)或者把代码看成数据。使用 Lambda 表达式可以...
JDK8新特性 1、lambda表达式(重点) 2、函数式接口 3、方法引用与构造器引用 4、Stream API(重点) 5、接口中的默认方法和静态方法 6、新时间日期API 7、其他新特性 注意: JDK8或者JDK1.8是由于自从JDK1.5/JDK5...
Oracle 官网提供的jdk8的安装包 jdk8增加了Lambda 表达式 : Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });、 函数式接口 : converter = something::startsWith; ...
主要介绍了Java JDK 1.8 lambda的用法详解,文中给大家提到了jdk 1.8 Lambda 表达式 遍历数组的方法,需要的朋友可以参考下