本篇文章小编给大家分享一下Java中Lambda表达式代码使用解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
理解函数式接口以及 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{ 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; } }
Listlist=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(Listlist){ Collections.sort(list, (student1, student2) -> student1.compareTo(student2)); }
来康康使用Java7进行排序是这样的:
// 使用 java 7 排序 private void sortUsingJava7(Listlist){ Collections.sort(list, new Comparator () { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); }
2.遍历集合
//先准备一个集合 Listlist=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;
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整