首页 技术 正文
技术 2022年11月14日
0 收藏 945 点赞 3,337 浏览 2700 个字

使用Lambda的方式实现线程


  • 线程中()是run方法的(),可用来接受参数,格式:
new Thread(()->{
System.out.println(Thread.currentThread().getName() + "执行");
},"Lambda线程创建").start();

Lambda标准格式:


  1. 一些参数

():接口中抽象方法的参数列表,无,就空着

  1. 一个箭头

->:把参数传递给代码块{}

  1. 一段代码块

{}:重写接口的抽象方法的方法体

Lambda表达式,是可推导,是可省略的


  • 凡是可以根据上下文推导出来的内容,都可以省略不写
  • 仅在接口只有一个抽象方法的时候,这种接口称为函数式接口
  • 传递的方法或参数必须是Lambda对应接口类型,才能Lambda作为该接口实例

可以省略的内容:

  1. (参数列表):括号中参数列表的数据类型可以省略不写
  2. (参数列表):如果参数只有一个,类型和()都可以省略
  3. {方法体},如果代码只有一行,无论是否有返回值,{},return,分号都可以省略,必须一起省略
  4. 注:()里什么都没有不能省略
  • 下面代码优化
//优化简写,省略了数据类型和{} return ;
Arrays.sort(person,(o1, o2) -> o1.getAge()-o2.getAge());//优化简写,省略了{}和;
cookFood(() -> System.out.println("我最简单"));

练习一:


  • 给定一个厨子接口,内含抽象方法,无参,无返回值
public interface Cook{
public abstract void makeFood();
}
  • 在main中打印输出接口抽象方法的实现
public class Demo01 {
public static void main(String[] args) {
//原型
cookFood(new Cook() {
@Override
public void makeFood() {
System.out.println("我太难了");
}
}); //使用Lambda表达式
cookFood(()->{
System.out.println("我实现了接口方法");
}); //优化简写
cookFood(() -> System.out.println("我最简单")); public static void cookFood(Cook cook){
cook.makeFood();
}
}

练习二:数组排序简化,Lambda表达式有参数


  • Person类
package cn.learn.thread.Lambda.practice;public class Person {
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;
} public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
  • 数组排序
package cn.learn.thread.Lambda.practice;import java.util.Arrays;
import java.util.Comparator;public class Demo {
public static void main(String[] args) {
//使用数组存储Person对象
Person[] person = {
new Person("sda",12),
new Person("sa",19),
new Person("da",10)
};/* //使用Arrays的sort方法进行排序,升序
Arrays.sort(person, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});*/ //使用Lambda表达式
Arrays.sort(person,(Person o1, Person o2)-> {
return o1.getAge()-o2.getAge();
}); //优化简写
Arrays.sort(person,(o1, o2) -> o1.getAge()-o2.getAge()); //增强for循环打印输出
for (Person p:person) {
System.out.println(p);
}
}
}

练习三:Lambda表达式求和


  • 定义一个计算器接口
package cn.learn.thread.Lambda.practice;
public interface Calculator {
public abstract int calc(int ...sum);
}
  • 实现运算
package cn.learn.thread.Lambda.practice;public class Demo01 {
public static void main(String[] args) {
//使用匿名的方法求和
//运行步骤:匿名创建实现类->实现类实现(重写)接口方法->传递匿名实现类->
//->传递不定数量的数值->c.calc(sNum)调用接口方法计算值,并返回值给sum
int sum = sumNumber(new Calculator() {
int sum=0;
//重写方法,无实参值运算
@Override
public int calc(int... num) {
for (int n: num) {
sum+=n;
}
return sum;
}
},7,8,9); //使用Lambda表达式简写
int sum01= sumNumber((int ...num)->{
int temp=0;
for (int n: num) {
temp+=n;
}
return temp;
},74,22); System.out.println(sum);//24
System.out.println(sum01);//96
} public static int sumNumber(Calculator c, int ...sNum){
//把数组地址给接口方法的不定值num
int sum = c.calc(sNum);
return sum;
}
}
上一篇: php优化方法
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,956
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,480
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,327
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,110
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,741
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,776