以下关于lambda 表达式的使用实在java8的语法上进行的
使用Lambda表达式不仅让代码变的简单、而且可读、最重要的是代码量也随之减少很多,好了废话不多说,列举一些我在这个项目中使用的方式:
关于List的场景:
package mountain.entity;
import lombok.Data;
@Data
public class Student {
int classId;
String name;
String phone;
int age;
public Student(int classId, String name, String phone, int age) {
this.classId = classId;
this.name = name;
this.phone = phone;
this.age = age;
}
}
package mountain.lambda;
import mountain.entity.Student;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class ListLambda {
public static void main(String[] args) {
Student student1 = new Student(1, "tom1", "134***", 12);
Student student2 = new Student(1, "tom2", "135***", 15);
Student student3 = new Student(2, "tom3", "136***", 18);
Student student4 = new Student(2, "tom4", "137***", 20);
List<Student> list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
// 我们需要提取list中每个user的phone信息,并且把这些phone放到一个新的集合中
List<String> phoneList = list.stream().map(s -> s.getPhone()).collect(Collectors.toList());
phoneList.forEach(System.out::println);
System.out.println("*************分割线*************");
// 我们需要提取list中每个user的name信息,提取之后拼接成字符串,中间用逗号(,)分割开
String collect = list.stream().map(s -> s.getName()).collect(Collectors.joining(","));
System.out.println(collect);
System.out.println("*************分割线*************");
// 我们需要提取list中userId等于1的一个学生,并获取他的姓名
Optional<Student> UserFirst = list.stream().filter(s -> 1 == s.getClassId()).findFirst();
if (UserFirst.isPresent()) {
System.out.println(UserFirst.get().getName());
}
System.out.println("*************分割线*************");
// 我们需要提取list中学生年龄大于15岁的学生班级ID,并把这些班级ID放到一个字符串数组中
String[] targetIds = list.stream()
.filter(u -> u.getAge() > 15)
.map(s -> String.valueOf(s.getClassId()))
.toArray(String[]::new);
for (String id : targetIds) {
System.out.println(id);
}
System.out.println("*************分割线*************");
// 我们需要提取list中年龄最大的学生的名字
String maxAgeName = list.stream().max(Comparator.comparingInt(Student::getAge)).get().getName();
System.out.println("maxAgeName:" + maxAgeName);
System.out.println("*************分割线*************");
// 先根据学生的年龄倒叙,再取前3的名字,中间用逗号隔开
String topThreeName = list.stream().sorted(Comparator.comparingInt(Student::getAge)).limit(3).map(u -> u.getName()).collect(Collectors.joining(","));
System.out.println("topThreeName:" + topThreeName);
System.out.println("*************分割线*************");
//统计年龄大于18岁的人数
long ageCount = list.stream().filter(s -> s.getAge() > 18).count();
//统计所有学生的年龄加起来有多大
int ageSum = list.stream().mapToInt(s -> s.getAge()).sum();
System.out.println("ageCount:" + ageCount);
System.out.println("ageSum:" + ageSum);
}
}
以上只是lambda针对list在java中的基本用法,本质只是起到一个抛砖引玉的作用,更多的相关功能还需要大家实践之后来慢慢分享,下次有时间给大家分享一下lambda关于map的相关用法,感觉有用的你可以点个赞!谢谢了