使用java8 新特性stream流对List对象进行遍历、过滤、查询、去重、排序、分组
新建一个名为Student的类,包含以下属性:
public class Student {
private String name;
private int age;
private String major;
private double score;
// 构造函数、getter和setter方法
}
现在我们有一个List<Student>类型的列表,可以使用Java8的stream流对它进行遍历、过滤、查询、去重、排序、分组等操作。
1、遍历
使用forEach()方法遍历List中的每一个元素:
List<Student> list = new ArrayList<>();
// 添加元素到list
list.stream().forEach(System.out::println);
2、过滤
使用filter()方法过滤出分数大于80分的同学:
List<Student> list = new ArrayList<>();
// 添加元素到list
List<Student> filteredList = list.stream()
.filter(s -> s.getScore() >= 80.0)
.collect(Collectors.toList());
3、查询
使用findFirst()或findAny()方法查询第一个或任意一个元素:
List<Student> list = new ArrayList<>();
// 添加元素到list
Optional<Student> studentOptional = list.stream()
.filter(s -> s.getName().equals("Tom"))
.findFirst();
4、去重
使用distinct()方法去重
List<Student> list = new ArrayList<>();
// 添加元素到list
List<Student> distinctList = list.stream()
.distinct()
.collect(Collectors.toList());
5、排序
使用sorted()方法对元素进行排序:
List<Student> list = new ArrayList<>();
// 添加元素到list
// 按照分数升序排序
List<Student> sortedList = list.stream()
.sorted(Comparator.comparingDouble(Student::getScore))
.collect(Collectors.toList());
// 按照年龄降序排序
List<Student> reversedList = list.stream()
.sorted(Comparator.comparingInt(Student::getAge).reversed())
.collect(Collectors.toList());
6、分组
使用groupingBy()方法对元素进行分组:
List<Student> list = new ArrayList<>();
// 添加元素到list
Map<String, List<Student>> groupByMajor = list.stream()
.collect(Collectors.groupingBy(Student::getMajor));