package com.expgiga.Java8; /** * */ public class Employee { private String name; private int age; private double salary; private int id; private Status status; public Employee() { } public Employee(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public Employee(String name, int age, double salary, Status status) { this.name = name; this.age = age; this.salary = salary; this.status = status; } 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 double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + ", id=" + id + ", status=" + status + '}'; } public Employee(int id) { this.id = id; } public Employee(int id, int age) { this.id = id; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Employee employee = (Employee) o; if (age != employee.age) return false; if (Double.compare(employee.salary, salary) != 0) return false; if (id != employee.id) return false; return name != null ? name.equals(employee.name) : employee.name == null; } @Override public int hashCode() { int result; long temp; result = name != null ? name.hashCode() : 0; result = 31 * result + age; temp = Double.doubleToLongBits(salary); result = 31 * result + (int) (temp ^ (temp >>> 32)); result = 31 * result + id; return result; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } public enum Status { FREE, BUSY, VOCATION; } }
package com.expgiga.Java8; import java.util.*; import java.util.stream.Collector; import java.util.stream.Collectors; /** * Java8 Stream的终止操作: */ public class TestStreamAPI { public static void main(String[] args) { /* * 查找与匹配 * allMatch * anyMatch * noneMatch * findFirst * findAny * count * max * min * */ List<Employee> employeeList = Arrays.asList( new Employee("zhangsan", 18, 19999, Employee.Status.FREE), new Employee("lisi", 28, 29999, Employee.Status.BUSY), new Employee("wangwu", 38, 39999, Employee.Status.VOCATION), new Employee("zhaoliu", 16, 17999, Employee.Status.BUSY), new Employee("tianqi", 6, 12999, Employee.Status.FREE), new Employee("tianqi", 6, 12999, Employee.Status.FREE) ); /* * 归约 * reduce */ List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Integer sum = list.stream() .reduce(0, (x, y) -> x + y); System.out.println(sum); System.out.println("-----------------------------------------------"); Optional<Double> op = employeeList.stream() //可能为空 所有返回的是Optional .map(Employee::getSalary) .reduce(Double::sum); System.out.println(op.get()); /* * 收集 * collect */ List<String> list2 = employeeList.stream() .map(Employee::getName) .collect(Collectors.toList()); list2.forEach(System.out::println); Set<String> set = employeeList.stream() .map(Employee::getName) .collect(Collectors.toSet()); set.forEach(System.out::println); System.out.println("-----------------------------------------------"); HashSet<String> hs = employeeList.stream() .map(Employee::getName) .collect(Collectors.toCollection(HashSet::new)); hs.forEach(System.out::println); //总数 Long count = employeeList.stream() .collect(Collectors.counting()); System.out.println(count); //平均值 Double avg = employeeList.stream() .collect(Collectors.averagingDouble(Employee::getSalary)); System.out.println(avg); //总和 Double sumSalary = employeeList.stream() .collect(Collectors.summingDouble(Employee::getSalary)); System.out.println(sumSalary); //最大值 Optional<Employee> max = employeeList.stream() .collect(Collectors.maxBy((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))); System.out.println(max.get()); //最小值 Optional<Double> min = employeeList.stream() .map(Employee::getSalary) .collect(Collectors.minBy(Double::compare)); System.out.println(min.get()); //分组 Map<Employee.Status, List<Employee>> map = employeeList.stream() .collect(Collectors.groupingBy(Employee::getStatus)); System.out.println(map); //多级分组 Map<Employee.Status, Map<String, List<Employee>>> mapMap = employeeList.stream() .collect(Collectors.groupingBy(Employee::getStatus, Collectors.groupingBy((e) -> { if (((Employee)e).getAge() <= 18) { return "dud"; } else if(((Employee)e).getAge() <= 30) { return "heh"; } else { return "hah"; } }))); System.out.println(mapMap); //分片(分区) Map<Boolean, List<Employee>> booleanListMap = employeeList.stream() .collect(Collectors.partitioningBy((e) -> e.getSalary() > 13000)); System.out.println(booleanListMap); //其他 DoubleSummaryStatistics dss = employeeList.stream() .collect(Collectors.summarizingDouble(Employee::getSalary)); System.out.println(dss.getSum()); String str = employeeList.stream() .map(Employee::getName) .collect(Collectors.joining()); System.out.println(str); } }