1.关键代码
1.Employee2的bean类
/**
* 创建日期:2021/10/29 14:01
*
* @author tony.sun
* 类说明:
*/
public class Employee2 {
private String name;
private Integer age;
private Double salary;
private Status Status;
public Employee2(String name, Integer age, Double salary, Employee2.Status status) {
this.name = name;
this.age = age;
this.salary = salary;
Status = status;
}
/**
* 闲着,忙碌,休假
*/
public enum Status{
FREE,
BUSY,
VOCATION;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Employee2.Status getStatus() {
return Status;
}
public void setStatus(Employee2.Status status) {
Status = status;
}
@Override
public String toString() {
return "Employee2{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", Status=" + Status +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee2 employee2 = (Employee2) o;
return Objects.equals(name, employee2.name) &&
Objects.equals(age, employee2.age) &&
Objects.equals(salary, employee2.salary) &&
Status == employee2.Status;
}
@Override
public int hashCode() {
return Objects.hash(name, age, salary, Status);
}
}
2.Stream11Find类,流操作
import com.netease.streamlearningbyjava.bean.Employee2;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
/**
* 创建日期:2021/11/3 10:12
*
* @author tony.sun
* 类说明:
*/
public class Stream11Find {
List<Employee2> employee2s = Arrays.asList(
new Employee2("张三", 18, 9999.99, Employee2.Status.FREE),
new Employee2("李四", 58, 5555.55, Employee2.Status.BUSY),
new Employee2("王五", 26, 3333.33, Employee2.Status.VOCATION),
new Employee2("赵六", 36, 6666.66, Employee2.Status.FREE),
new Employee2("田七", 12, 8888.88, Employee2.Status.BUSY)
);
/**这些属于终止操作
* 查找与匹配
* allMatch--检查是否匹配所有元素
* anyMatch--检查是否至少匹配一个元素
* noneMatch--检查是否没有匹配所有元素
* findFirst--返回第一个元素
* findAny--返回第一个元素
* findAny--返回流中任意元素
* count--返回流中元素的总个数
* max--返回流中的最大值
* min--返回流中的最小值
*/
@Test
public void test1(){
//allMatch表示是否都匹配,这里是list里所有对象的Status都匹配BUSY
boolean allMatch = employee2s.stream()
.allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//固定格式:(e) ->,还有条件,这里是等于BUSY,
System.out.println("allMatch:"+allMatch);
//是否任意一个是匹配的BUSY
boolean anyMatch = employee2s.stream()
.anyMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
System.out.println("anyMatch:"+anyMatch);
//是否不存在一个匹配BUSY的
boolean noneMatch = employee2s.stream()
.noneMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
System.out.println("noneMatch:"+noneMatch);
//findFirst表示查找第一个,这里是获取最低工资的人,
Optional<Employee2> findFirst = employee2s.stream()
.sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序
.findFirst();
System.out.println("findFirst:"+findFirst.get());//获取这个bean
//获取最高工资,多了个-号
Optional<Employee2> findFirst2 = employee2s.stream()
.sorted((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序,这里多了个“-”
.findFirst();
System.out.println("findFirst2:"+findFirst2.get());//获取这个bean
//findAny任意找一个,这里是在闲着的员工中任意找一个
Optional<Employee2> findAny = employee2s.stream()
.filter((e) -> e.getStatus().equals(Employee2.Status.FREE))//这里是过滤,满足条件FREE的保留
.findAny();//任意找一个
System.out.println("findAny:"+findAny.get());
}
@Test
public void test2(){
//总个数
long count = employee2s.stream()
.count();
System.out.println("count:"+count);
//最大值
Optional<Employee2> max = employee2s.stream()
.max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最高
System.out.println("max:"+max.get());
//最小值
Optional<Employee2> min = employee2s.stream()
.min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最低
System.out.println("min:"+min.get());
}
}
2.步骤与讲解
1.创建list
List<Employee2> employee2s = Arrays.asList(
new Employee2("张三", 18, 9999.99, Employee2.Status.FREE),
new Employee2("李四", 58, 5555.55, Employee2.Status.BUSY),
new Employee2("王五", 26, 3333.33, Employee2.Status.VOCATION),
new Employee2("赵六", 36, 6666.66, Employee2.Status.FREE),
new Employee2("田七", 12, 8888.88, Employee2.Status.BUSY)
);
2.allMatch表示是否都匹配
//是否任意一个是匹配的BUSY
boolean allMatch = employee2s.stream()
.allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//固定格式:(e) ->,还有条件,这里是等于BUSY,
System.out.println("allMatch:"+allMatch);//false
.allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY))的意思是是否任意一个employee2s的Status都匹配BUSY
3.anyMatch表示任意一个是否匹配
//是否任意一个是匹配的BUSY
boolean anyMatch = employee2s.stream()
.anyMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
System.out.println("anyMatch:"+anyMatch);
4.noneMatch表示是否不存在一个匹配
//是否不存在一个匹配BUSY的
boolean noneMatch = employee2s.stream()
.noneMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
System.out.println("noneMatch:"+noneMatch);
5.findFirst表示查找第一个值
//findFirst表示查找第一个,这里是获取最低工资的人,
Optional<Employee2> findFirst = employee2s.stream()
.sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序
.findFirst();
System.out.println("findFirst:"+findFirst.get());//获取这个bean
//获取最高工资,多了个-号
Optional<Employee2> findFirst2 = employee2s.stream()
.sorted((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序,这里多了个“-”
.findFirst();
System.out.println("findFirst2:"+findFirst2.get());//获取这个bean
6.findAny表示找任意一个
//findAny任意找一个,这里是在闲着的员工中任意找一个
Optional<Employee2> findAny = employee2s.stream()
.filter((e) -> e.getStatus().equals(Employee2.Status.FREE))//这里是过滤,满足条件FREE的保留
.findAny();//任意找一个
System.out.println("findAny:"+findAny.get());