quot;));
one.add(new Employee("沙僧",'男',2000,20000,null));
one.add(new Employee("小白龙",'男',20000,25000,null));
List<Employee> two = new ArrayList<>();
two.add(new Employee("武松",'男',15000,9000,null));
two.add(new Employee("李逵",'男',25000,10000,null));
two.add(new Employee("西门庆",'男',50000,10000,"迟到"));
two.add(new Employee("潘金莲",'女',3500,1000,"打人"));
two.add(new Employee("武大郎",'女',20000,0,"偷窃"));
- 筛选两个部门的最高工资的员工信息。
新建一个对象Topperformer
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Topperformer {
private String name;
private double money;//月薪
}
// 1、开发1部的最高工资的员工
//指定大小规则
Topperformer t = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
.map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get();
// 2、开发2部的最高工资信息
// 1)先用max定义规则,比较大小;2)用map进行加工
Topperformer t2 = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
.map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get();
- 统计2个部门的平均月收入,去掉最高工资和最低工资。
//开发1部
one.stream().sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())).
skip(1).limit(one.size()-2).forEach(e->{
//求出总和:剩余员工的工资总和
allMoney += e.getBonus()+e.getSalary();
});
System.out.println("开发1部的平均工资是" +allMoney/(one.size()-2));
//开发2部
two.stream().sorted((e1,e2)->Double.compare(e1.getSalary()+e1.getBonus(),e2.getSalary()+e2.getBonus()))
.skip(1).limit(two.size()-2).forEach(employee -> {
allMoney2 += employee.getSalary()+employee.getBonus();
});
System.out.println("开发2的平均月收入是"+allMoney2);
- 统计两个部门的整体平均工资
Stream<Employee> s1 = one.stream();
Stream<Employee> s2 = two.stream();
Stream<Employee> s3 = Stream.concat(s1, s2);
s3.sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
.skip(1).limit(one.size()+two.size()-2).forEach(e ->{
allMoney3 += e.getSalary()+e.getBonus();
});
BigDecimal a = BigDecimal.valueOf(allMoney3);
BigDecimal b = BigDecimal.valueOf(one.size()+ two.size()-2);
System.out.println("2个部门的整体平均工资是" +a.divide(b,2, RoundingMode.HALF_UP));
整体代码:
package stream_test;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class StreamDemo1 {
public static double allMoney;
public static double allMoney2;
public static double allMoney3;
public static void main(String[] args) {
List<Employee> one = new ArrayList<>();
one.add(new Employee("猪八戒",'男',30000,25000,null));
one.add(new Employee("孙悟空",'男',25000,1000,"迟到"));
one.add(new Employee("沙僧",'男',2000,20000,null));
one.add(new Employee("小白龙",'男',20000,25000,null));
List<Employee> two = new ArrayList<>();
two.add(n