Java8流函数方法测试小结
最近用到 Java8 新特性时候,发现流函数非常好用,特地总结了一下常用的方法和应用范围,下面通过一个例子来展示
1、实体类代码
package com.test;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Author:LSR
* Date:2020/4/30
* DESCRIPTION:
*/public class Employee {private String name;
private int salary;
private String office;
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public int getSalary() {
return salary;
}public void setSalary(int salary) {
this.salary = salary;
}public String getOffice() {
return office;
}public void setOffice(String office) {
this.office = office;
}public Employee(String name, int salary, String office) {
this.name = name;
this.salary = salary;
this.office = office;
}@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", salary=" + salary +
", office='" + office + '\'' +
'}';
}
}
【Java8流函数方法测试小结】2、Java8 流函数各种方法应用测试代码
package com.test;
import java.util.*;
import java.util.stream.Collectors;
public class Java8Test2 {
private static List employeeList = new ArrayList<>();
static{
employeeList.add(new Employee("Matt",5000,"New York"));
employeeList.add(new Employee("Steve",6000,"London"));
employeeList.add(new Employee("Carrie",20000,"New York"));
employeeList.add(new Employee("Peter",7000,"New York"));
employeeList.add(new Employee("Pat",8000,"London"));
employeeList.add(new Employee("Tammy",29000,"Shanghai"));
/*employeeList.add(Employee.builder().name("Matt").salary(5000).office("New York").build());
employeeList.add(Employee.builder().name("Steve").salary(6000).office("London").build());
employeeList.add(Employee.builder().name("Carrie").salary(20000).office("New York").build());
employeeList.add(Employee.builder().name("Peter").salary(7000).office("New York").build());
employeeList.add(Employee.builder().name("Pat").salary(8000).office("London").build());
employeeList.add(Employee.builder().name("Tammy").salary(29000).office("Shanghai").build());
*/
}public static void main(String[] args) {
//anyMatch
boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
System.out.println(isMatch);
//返回所有salary大于6000
boolean matched = employeeList.stream().allMatch(employee -> employee.getSalary()>4000);
System.out.println("返回所有salary大于6000:"+matched);
//找出工资最高
Optional hightestSalary = employeeList.stream().max((e1, e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
System.out.println("找出工资最高:"+hightestSalary);
//返回姓名列表
List names = employeeList.stream().map(employee -> employee.getName()).collect(Collectors.toList());
System.out.println("返回姓名列表:"+names);
//List转换成Map 其中 (k1, k2)->k2 表示最后的值覆盖前面的值可以达到去重目的
Map employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value),(k1, k2)->k2));
employeeMap.forEach((key,value)-> System.out.println(key + "=" + value.toString()));
//统计办公室是New York的个数
long officeCount = employeeList.stream().filter(employee -> employee.getOffice().equals("Shanghai")).count();
System.out.println("统计办公室是New York的个数:"+officeCount);
//List转换为Set
Set officeSet = employeeList.stream().map(employee -> employee.getOffice()).distinct().collect(Collectors.toSet());
System.out.println("List转换为Set:"+officeSet.toString());
//查找办公室地点是New York的员工
Optional allMatchedEmployees = employeeList.stream().filter(employee -> employee.getOffice().equals("New York")).findAny();
System.out.println("查找办公室地点是New York的员工:"+allMatchedEmployees.toString());
//按照工资的降序来列出员工信息
List sortEmployeeList =employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
//按照名字的升序列出员工信息
List sortEmployeeByName = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
System.out.println("按照工资的降序来列出员工信息:" +sortEmployeeList);
System.out.println("按照名字的升序列出员工信息:" + sortEmployeeByName.toString());
//获取工资最高的前2条员工信息
List top2EmployeeList= employeeList.stream()
.sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary()))
.limit(2)
.collect(Collectors.toList());
System.out.println("获取工资最高的前2条员工信息:"+top2EmployeeList.toString());
//获取平均工资
OptionalDouble averageSalary = employeeList.stream().mapToInt(employee->employee.getSalary()).average();
System.out.println("平均工资:" + averageSalary);
//查找New York
OptionalDouble averageSalaryByOffice = employeeList.stream().filter(employee -> employee.getOffice()
.equals("New York"))
.mapToInt(employee->employee.getSalary())
.average();
System.out.println("New York办公室平均工资:" + averageSalaryByOffice);
}
}
推荐阅读
- live|live to inspire 一个普通上班族的流水账0723
- 流转
- Guava|Guava RateLimiter与限流算法
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- (小说)月流水几亿的火爆游戏养成记
- 谁还用剩米饭做蛋炒饭啊,现在流行这么吃!