温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用Java中Lambda表达式

发布时间:2021-09-30 17:03:10 来源:亿速云 阅读:146 作者:iii 栏目:开发技术

本篇内容介绍了“如何使用Java中Lambda表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 理解函数式接口以及 Lambda表达式的发展过程

  • Lambda表达式及语法

  • 一起来看看具体的使用

  • 你需要注意什么

  • Lambda的实际运用

    • 1.对集合排序

    • 2.遍历集合

    • 3.遍历集合(带条件)

    • 4.代替 Runnable,开启一个线程

理解函数式接口以及 Lambda表达式的发展过程

任何接口,只包含唯一一个抽象方法,就是函数式接口

/**  * lambdab表达式的发展  */ public class TestLambda1 {     //3.静态内部类     static class Like2 implements ILike{         @Override         public void lambda() {             System.out.println("i like lambda2");         }     }     public static void main(String[] args) {         ILike like=new Like();         like.lambda();         like=new Like2();         like.lambda();         //4.局部内部类        class Like3 implements ILike{             @Override             public void lambda() {                 System.out.println("i like lambda3");             }         }         like=new Like3();         like.lambda();         //5.匿名内部类         like=new ILike() {             @Override             public void lambda() {                 System.out.println("i like lambda4");             }         };         like.lambda();         //6.用lambda简化         like=()->{             System.out.println("i like lambda5");         };         like.lambda();     } } //1.定义一个函数式接口 interface ILike{     void lambda(); } //2.实现类 class Like implements ILike{     @Override     public void lambda() {         System.out.println("i like lambda");     } }

Lambda表达式及语法

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

// 1. 不需要参数,返回值为 5   () -> 5      // 2. 接收一个参数(数字类型),返回其2倍的值   x -> 2 * x      // 3. 接受2个参数(数字),并返回他们的差值   (x, y) -> x – y      // 4. 接收2个int型整数,返回他们的和   (int x, int y) -> x + y      // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)   (String s) -> System.out.print(s)

也就是说,不需要事先声明参数的类型,圆括号可以没有,大括号可以没有,返回值可以没有

一起来看看具体的使用

public class java8_Lambda_Test {     public static final void main(String[] args) {         Operator addOper = (a, b) -> a + b;         Operator reduceOper = (a, b) -> a - b;         Operator multiplyOper = (a, b) -> a * b;         Operator DivideOper = (a, b) -> a / b;         java8_Lambda_Test test = new java8_Lambda_Test();         System.out.println(test.getResult(3, 3, addOper));//6         System.out.println(test.getResult(3, 3, reduceOper));//0         System.out.println(test.getResult(3, 3, multiplyOper));//9         System.out.println(test.getResult(3, 3, DivideOper));//1     }     public int getResult(int a, int b, Operator operator) {         return operator.convert(a, b);     }     public interface Operator {         int convert(int a, int b);         default int get(int a) {             return a;         }     } }

你需要注意什么

1.lambda 表达式只能引用标记了 final 的外层局部变量
2.可以直接在 lambda 表达式中访问外层的局部变量

Lambda的实际运用

1.对集合排序

问题描述:在一个存放了Student对象的list中,按年龄进行排序,输出排序后的list

Student类

public class Student implements Comparable<Student>{     private String name;     private int age;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public int getAge() {         return age;     }     public void setAge(int age) {         this.age = age;     }     @Override     public int compareTo(Student student2) {        int result =this.age - student2.age;        return result;     } }
List<Student> list=new ArrayList<>();         Student s1=new Student();         s1.setName("张三");         s1.setAge(28);         list.add(s1);         Student s=new Student();         s.setName("李四");         s.setAge(22);         list.add(s);         sortUsingJava8(list);         list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));
 // 使用 java 8 排序     static void sortUsingJava8(List<Student> list){         Collections.sort(list, (student1, student2) -> student1.compareTo(student2));     }

来康康使用Java7进行排序是这样的:

// 使用 java 7 排序     private void sortUsingJava7(List<String> list){         Collections.sort(list, new Comparator<String>() {            @Override            public int compare(String s1, String s2) {                 return s1.compareTo(s2);             }         });     }

2.遍历集合

//先准备一个集合         List<Student> list=new ArrayList<>();         Student s1=new Student();         s1.setName("张三");         s1.setAge(28);         list.add(s1);         Student s=new Student();         s.setName("李四");         s.setAge(22);         list.add(s); //使用 lambda 表达式以及函数操作(functional operation)   list.forEach((student) -> System.out.println(student.getName() + ":"+student.getAge()));

3.遍历集合(带条件)

 //带条件 打印年龄大于等于20的学生的姓名         list.forEach((student)->{             if (student.getAge()>=20)                 System.out.println(student.getName());                 });

4.代替 Runnable,开启一个线程

Runnable r = new Runnable() {     @Override     public void run() {         //to do something     } }; Thread t = new Thread(r); t.start();

现在这样写:

Runnable r = () -> {     //to do something }; Thread t = new Thread(r); t.start();

你还可以这样写:

Thread t = new Thread(() -> {     //to do something     // such as for     for(int i = 0; i < 100; i++){         System.out.println(i);            } }); t.start;

“如何使用Java中Lambda表达式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI