- 需求:某个公司的开发部门,分为开发 一部 和 二部 ,现在需要进行年中数据结算。分析:
- 员工信息至少包含了(名称、性别、工资、奖金、处罚记录)
- 开发一部有 4 个员工、开发二部有 5 名员工
- 分别筛选出 2 个部门的最高工资的员工信息,封装成优秀员工对象Topperformer
- 分别统计出 2 个部门的平均月收入,要求去掉最高和最低工资
- 统计 2 个开发部门整体的平均工资,去掉最低和最高工资的平均值
|
|
- 根据提供的Comparator返回此流的 最大元素
|
|
|
- 返回由此流的元素组成的流,根据Comparator进行排序
|
package com.csdn.streampractice;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.function.Consumer;
import java.util.stream.Stream;
public class StreamDemo04 {
private static double allMoney;
private static double allMoney2;
private static double averageTwo;
public static void main(String[] args) {
List one = new ArrayList<>();
Collections.addAll(one, new Employee("张三丰", '男', 30000, 25000, null),
new Employee("张翠山", '男', 25000, 1000, "顶撞上司"),
new Employee("张无忌", '男', 20000, 20000, null),
new Employee("赵敏", '女', 20000, 25000, null));
Optional optional = one.stream().max(Comparator.comparingDouble(o -> o.getSalary() + o.getBonus()));
Employee employee = optional.get();
System.out.println(employee);
Optional topperFormer = optional.map(e -> new TopperFormer(e.getName(), e.getSalary() + e.getBonus()));
TopperFormer topperFormer1 = topperFormer.get();
System.out.println(topperFormer1);
one.stream().sorted(Comparator.comparingDouble(o -> o.getSalary() + o.getBonus())).skip(1).
limit(one.size() - 2).forEach(new Consumer() {
public void accept(Employee employee) {
allMoney += (employee.getSalary() + employee.getBonus());
System.out.println("开发一部的平均工资是:" + allMoney / (one.size() - 2));
List two = new ArrayList<>();
Collections.addAll(two, new Employee("喜羊羊", '男', 15000, 9000, null),
new Employee("美羊羊", '女', 20000, 10000, null),
new Employee("懒洋洋", '女', 50000, 100000, "被打"),
new Employee("灰太狼", '男', 3500, 1000, "被打"),
new Employee("红太狼", '女', 20000, 0, "下毒"));
Optional optional2 = two.stream().max(Comparator.comparingDouble(o -> o.getSalary() + o.getBonus()));
Employee employee2 = optional2.get();
System.out.println(employee2);
Optional topperFormer2 = optional2.map(e -> new TopperFormer(e.getName(), e.getSalary() + e.getBonus()));
TopperFormer topperFormer3 = topperFormer2.get();
System.out.println(topperFormer3);
two.stream().sorted(Comparator.comparingDouble(o -> o.getSalary() + o.getBonus())).skip(1).
limit(two.size()-2).forEach(new Consumer() {
public void accept(Employee employee) {
averageTwo += (employee.getSalary() + employee.getBonus());
System.out.println("开发二部的平均工资是:" + averageTwo / (two.size() - 2));
Stream s1 = one.stream();
Stream s2 = two.stream();
Stream s3 = Stream.concat(s1, s2);
s3.sorted(Comparator.comparingDouble(o -> o.getSalary() + o.getBonus())).
skip(1).limit(one.size() + two.size() - 2).forEach(employee1 -> {
allMoney2 += (employee1.getSalary() + employee1.getBonus());
BigDecimal a = BigDecimal.valueOf(allMoney2);
BigDecimal b = BigDecimal.valueOf(one.size() + two.size() - 2);
System.out.println("开发部的平均工资是:" + a.divide(b,2, RoundingMode.HALF_UP));

package com.csdn.Stream2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class StreamSorted {
public static void main(String[] args) {
ArrayList list = new ArrayList();
Collections.addAll(list, "eee", "dd", "ccc", "bb", "aaa");
list.stream().sorted().forEach(System.out::println);
System.out.println("============");
list.stream().sorted(new Comparator() {
public int compare(String o1, String o2) {
int num = o1.length() - o2.length();
int num2 = num == 0 ? o1.compareTo(o2) : num;
}).forEach(System.out::println);