前言
利用Java8 新特性 Stream进行求和、过滤、排序。
提示:以下是本篇文章正文内容,下面案例可供参考
1.创建实体类
代码如下(示例):
@Data
public class Employee implements Serializable {
private static final long serialVersionUID = -9079722457749166858L;
/**
* 名字
*/
private String name;
/**
* 年龄
*/
private Integer age;
/**
* 薪水
*/
private Double salary;
/**
* 部门号
*/
private Integer deptNo;
}
2.创建测试类开始测试
代码如下(示例):
public class Test {
public static void main(String[] args) {
Employee employee1 = new Employee();
employee1.setName("一号");
employee1.setAge(10);
employee1.setSalary(100.00);
employee1.setDeptNo(1);
Employee employee2 = new Employee();
employee2.setName("二号");
employee2.setAge(20);
employee2.setSalary(1000.00);
employee2.setDeptNo(1);
Employee employee3 = new Employee();
employee3.setName("三号");
employee3.setAge(30);
employee3.setSalary(300.00);
employee3.setDeptNo(2);
Employee employee4 = new Employee();
employee4.setName("四号");
employee4.setAge(40);
employee4.setSalary(400.00);
employee4.setDeptNo(1);
List<Employee> employees = new ArrayList<>();
employees.add(employee1);
employees.add(employee2);
employees.add(employee3);
employees.add(employee4);
//求获取List对象中某个字段的集合
List<String> names = employees.stream().map(employee -> employee.getName()).collect(Collectors.toList());
//求和
Integer ageSum = employees.stream().mapToInt(e -> e.getAge()).sum();
Double totalSalary = employees.stream().mapToDouble(employee -> employee.getSalary()).sum();
//过滤:获取薪水大于200的,过滤掉不符合条件的
List<Employee> filterEmp = employees.stream().filter(employee -> employee.getSalary() > 200).collect(Collectors.toList());
//升序:按照薪水升序
List<Employee> ascEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary)).collect(Collectors.toList());
//降序:按照薪水降序
List<Employee> descEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary).reversed()).collect(Collectors.toList());
//分类:按员工所属部门号进行分类
Map<Integer, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(employee -> employee.getDeptNo()));
for (Map.Entry<Integer, List<Employee>> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey() + " value:" + entry.getValue());
}
//获取1号部门员工姓名,按薪水从高到低排序
List<String> nameList = employees.stream().filter(employee -> employee.getDeptNo().equals(1)).sorted(Comparator.comparing(Employee::getSalary)
.reversed()).map(employee -> employee.getName()).collect(Collectors.toList());
nameList.stream().forEach(System.out::println);
}
总结
使用java8中的Steam可以减少代码量,使代码阅读更急清晰