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表达式和Stream API。这两个特性极大地提升了Java处理集合数据的能力,使得代码更加简洁、高效。接下来,我们将深入探讨Lambda表达式...
JDK8特性(Lambda表达式+StreamAPI的简单使用示例代码)
Java 8 引入的 Lambda 表达式是 Java 编程语言的重大变革之一,它允许以更简洁的方式表示单方法接口的实现,极大地增强了 Java 语言的表达能力,尤其是结合了函数式接口、Stream API 和其他新特性后。接下来,我们将...
Java Development Kit (JDK) 8是Java编程...对于想要深入学习和使用JDK 8的开发者来说,这是一个不可或缺的资源。只需解压文件`jdk-8u151-docs-all`,打开`api`文件夹中的`index.html`,即可开始探索JDK 8的广阔世界。
这个压缩包“jdk8_API”包含了JDK 8的官方帮助文档,它是开发者理解和使用JDK 8的重要参考资料。 首先,JDK 8最显著的变化之一是Lambda表达式。这是一种简洁的匿名函数形式,可以作为参数传递或用作返回值。Lambda...
为了支持Lambda,JDK8定义了一些新的函数式接口,如`Function,R>`、`Consumer<T>`、`Supplier<T>`、`Predicate<T>`等,这些接口都只有一个抽象方法,是Lambda表达式的载体。 **3. 方法引用和构造器引用** 除了...
JDK 8最重要的特性之一就是引入了Lambda表达式,它使得函数式编程在Java中变得更加简洁。Lambda表达式可以被用作方法参数,可以实现接口中的单个抽象方法,简化了匿名内部类的使用。例如,`Function`、`Predicate` ...
在这个“jdk8免安装版”中,我们拥有的是已经解压并可以直接使用的JDK8版本,无需进行常规的安装过程。 首先,让我们了解一下JDK8的主要特性: 1. **lambda表达式**:这是JDK8最显著的改变之一,它简化了处理函数...
1. **Lambda表达式**:JDK8引入了Lambda表达式,使得函数式编程风格在Java中变得更为简洁。Lambda允许将匿名函数作为参数传递,或者直接定义为方法的返回值,简化了多线程处理和集合操作。 2. **函数式接口**:为了...
JDK 8中文说明文档提供了详尽的指南,帮助开发者理解和使用这个版本的各种功能。 1. **Lambda表达式**:JDK 8最大的亮点之一就是引入了Lambda表达式,它使得函数式编程风格在Java中成为可能。Lambda允许将匿名函数...
本篇文章将详细介绍JDK 8的关键特性和使用方法。 1. **Lambda表达式**:这是JDK 8最显著的新特性之一,它允许函数式编程风格的代码编写。Lambda表达式可以作为参数传递,也可以作为返回值。它们简化了匿名内部类的...
在`jdk8Demo`的示例中,你会看到如何将Stream API和Lambda表达式结合,优雅地处理集合数据,实现数据过滤、转换和聚合等功能。这两个特性不仅让Java代码更简洁,而且提高了代码的可读性和可维护性,是Java开发者必须...
1. **Lambda表达式**:JDK 8引入了Lambda表达式,这使得编写简洁、高效的多线程代码成为可能。Lambda允许将函数作为一个对象传递,简化了对集合的处理和事件驱动编程。 2. **方法引用和构造器引用**:这是与Lambda...
这个文档详细介绍了JDK 8中包含的所有类、接口、枚举和注解,为开发者提供了全面的函数库信息,使得理解和使用Java 8的功能变得更为简单。 1. **Lambda表达式**:JDK 8引入了lambda表达式,这是一种简洁的匿名函数...
1. **Lambda表达式**:JDK8引入了lambda表达式,这是一种简洁的匿名函数表示方式,使得函数式编程风格在Java中变得可能。Lambda表达式可以作为参数传递,也可以用作返回值,极大地简化了对集合的处理和多线程编程。 ...
2. **Lambda表达式**:这是JDK 8中最显著的新特性之一,它允许开发者以更简洁的语法处理函数式编程。Lambda表达式可以作为方法参数,可以被赋值给变量,也可以作为返回值。它们简化了对集合的流操作,提高了代码的...
JDK8是Oracle公司发布的一个重要版本,它在2014年3月发布了第一个正式版,至今仍被广泛使用。JDK8引入了许多新特性,提升了开发效率和代码质量,对于Java开发者来说是必备的工具。 一、JDK8的主要新特性: 1. ...
标题和描述中提到的"jdk-8u25、jdk-8u111、jdk-8u131、jdk-8u181、jdk-8u201"代表了不同版本的JDK,这些版本都是针对Java 8的更新版本,"u"后面的数字代表更新(Update)次数。 Java 8是Oracle公司发布的Java平台...
- **Lambda表达式**: JDK 8引入了Lambda表达式,使得函数式编程风格在Java中变得更为简洁和易读,特别是在处理集合时。 - **方法引用和构造器引用**: 这些新特性允许直接引用已有方法或构造器,简化了代码并提升了...
7. **类型注解**:JDK8增强了注解的使用,允许在类型参数、类型通配符、类型变量以及数组上使用注解。 8. **并行GC的改进**:在JDK8中,垃圾收集器进行了优化,例如G1(Garbage First)垃圾收集器成为服务器模式下...