相信大家在看完上篇Lambda介绍,想必对Lambda也有了一定的了解了,有没有打开了新的编码大门呢?(不了解Lambda的朋友,建议可以先学习一下Lambda的基础在来看本篇的内容)
本篇主要给大家介绍Lambda的一些实战案例:
线程实战
public class Demo4 {
public static void main(String[] args) {
// 使用Lambda启动线程
// 1.传统方式使用
Thread t1 = new Thread(new MyRunnable());
t1.start();
// 2.匿名内部类使用
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("t2 running...");
}
});
t2.start();
// 3.Lambda使用
Thread t3 = new Thread(() -> System.out.println("t3 running..."));
t3.start();
// 更简写法1
new Thread(() -> System.out.println("t4 running...")).start();
// 更简写法2
Process.process(()-> System.out.println("t5 running..."));
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("t1 running...");
}
}
interface Process {
// Java8中允许接口中定义非抽象方法 前提该方法必须为 default 或 static
static void process(Runnable runnable) {
new Thread(runnable).start();
}
}
List.sort()排序实战
public class Demo5 {
public static void main(String[] args) {
// List.sort() 排序
List<Person> list = new ArrayList<>();
list.add(new Person(3));
list.add(new Person(1));
list.add(new Person(8));
list.add(new Person(7));
list.add(new Person(5));
// 1.传统方式使用 - 升序
list.sort(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// o1和o2比较 1:大于 0:相等 -1:小于
// 颠倒结果就是降序
return o1.getHeight().compareTo(o2.getHeight());
}
});
// 2.Lambda使用 - 升序
list.sort((o1, o2) -> o1.getHeight().compareTo(o2.getHeight()));
// 打印结果
for (Person person : list) {
System.out.println(person.getHeight());
}
}
}
class Person {
public Person(Integer height){
this.height = height;
}
private Integer height;
public Integer getHeight() {
return height;
}
public void setHeight(Integer height) {
this.height = height;
}
}
List过滤指定元素实战
public class Demo6 {
public static void main(String[] args) {
List<People> list = new ArrayList<>();
list.add(new People("zs", 22));
list.add(new People("ls", 27));
list.add(new People("ww", 29));
list.add(new People("zl", 21));
// 集合遍历查找 年龄在20-25岁的人
List<People> search = new ArrayList<>();
// 1.传统方式
for (People people : list) {
if (people.getAge() >= 20 && people.getAge() <= 25){
search.add(people);
}
}
// 2.Lambda使用
// Stream是Java 8 提供的高效操作集合类(Collection)数据的API。
search = list.stream().filter((People people) -> people.getAge() >= 20 && people.getAge() <= 25).collect(Collectors.toList());
// 打印结果
for (People people : search) {
System.out.println(people.getName() + "-" + people.getAge());
}
}
}
class People {
public People(String name, Integer age) {
this.name = name;
this.age = age;
}
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
小结
可以使用Lambda的地方还有很多,本篇的案例也是给大家进行抛砖引玉。大家只要记住,使用Lambda的前提是对应接口有且只有一个抽象方法!!!。后续还会继续更新Lambda的实战,大家有好的实战案例,欢迎评论或私信我。谢谢~