当前位置:   article > 正文

jdk8新特性----Lambda表达式

jdk8新特性----Lambda表达式

一、介绍

1、简介

Java的Lambda表达式Java 8引入的一个特性,它支持函数式编程,允许将函数作为方法的参数或返回值,从而简化了匿名内部类的使用,并提供了对并行编程的更好支持。

2、语法

Lambda表达式的使用前提是存在一个接口,该接口中有且只有一个抽象方法。在主方法中可以通过创建接口的匿名内部类或使用Lambda表达式来调用该接口的方法。

Lambda表达式的语法为(parameter_list) -> {function_body},其中->将参数和实现逻辑分离,()中的部分是需要传入Lambda体中的参数,{}中的部分接收来自()中的参数,并完成一定的功能。

3、优点

Lambda表达式的主要优势包括:

  • 简化匿名内部类的使用,使代码更加简洁明了。
  • 支持函数式编程,允许函数作为第一类对象进行传递和操作。
  • 促进并行编程,因为函数式编程中的纯函数天然具备无副作用的特性,使得在并行编程中更容易实现可靠的多线程和并行处理。
4、用途

Lambda表达式主要用于函数式接口,即只包含一个抽象方法的接口,可以使用@FunctionalInterface注解进行标识。常用场景有:

  • 创建Runnable实例:Runnable runnable = () -> {System.out.println("Hello, Lambda!");};
  • 实现Consumer接口:numbers.forEach(n -> System.out.println(n));
  • 实现Predicate接口:filteredNames = names.stream().filter(name -> name.length() > 5).collect(Collectors.toList());
  • 创建线程:new Thread(() -> System.out.println("haha")).start();

二、使用场景

1、集合遍历
  1. List<String> stringList = Arrays.asList("apppe","organge","banana");
  2. // 原来的方式
  3. for (String s : stringList) {
  4. System.out.println(s);
  5. }
  6. // lambda 表达式
  7. stringList.forEach(s->{
  8. System.out.println(s);
  9. });
2、排序

注意:-1:代表第一个对象,1:代表第二个对象 

  1. List<Dog> dogs = Arrays.asList(new Dog[]{
  2. new Dog("n1", 12),
  3. new Dog("n2", 14),
  4. new Dog("n3", 11)
  5. });
  6. // 方法1
  7. Collections.sort(dogs, new Comparator<Dog>() {
  8. @Override
  9. public int compare(Dog o1, Dog o2) {
  10. return o1.getAge()>o2.getAge()?-1:1;
  11. }
  12. });
  13. // 方法2
  14. Collections.sort(dogs,(o1,o2)->(o1.getAge()>o2.getAge()?-1:1));
  15. dogs.forEach(s->{
  16. System.out.println(s.getAge());
  17. });
3、过滤
  1. List<String> stringList = Arrays.asList("apple","organge","banana");
  2. // 获取集合中所有以“a”开头的字符串
  3. // 原来的方式
  4. List<String> newList = new ArrayList<String>();
  5. for (String s : stringList) {
  6. if(s.startsWith("a")){
  7. newList.add(s);
  8. }
  9. }
  10. // lambda表达式
  11. List<String> newList2 = stringList.stream().filter(s -> {
  12. if(s.startsWith("a")){
  13. return true;
  14. }
  15. return false;
  16. }).collect(Collectors.toList());
4、映射
  1. List<String> stringList = Arrays.asList("apple","organge","banana");
  2. // 获取集合中所有字符串的长度
  3. // 原来的方式
  4. List<Integer> newList = new ArrayList<Integer>();
  5. for (String s : stringList) {
  6. newList.add(s.length());
  7. }
  8. // lambda表达式
  9. List<Integer> newList2 = stringList.stream().map(s -> {
  10. return s.length();
  11. }).collect(Collectors.toList());
  12. // lambda 表达式
  13. newList2.forEach(s->{
  14. System.out.println(s);
  15. });
5、规约
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/562657
推荐阅读
相关标签
  

闽ICP备14008679号