Stream流 - 取最大对象、最小对象

时间:2025-03-12 09:45:51
public class Test3 { public static void main(String[] args) throws ClassNotFoundException { ArrayList<Dnl> dnls = new ArrayList<>(); dnls.add(new Dnl("11.1","22.2")); dnls.add(new Dnl("22.1","66.2")); dnls.add(new Dnl("33.1","44.2")); dnls.add(new Dnl(null,"55.2")); dnls.add(new Dnl("33.1",null)); //计算总和 BigDecimal sumYgz = dnls.stream().map(vo -> new BigDecimal(vo.getYgz() == null ? "0" : vo.getYgz())).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal sumWgz = dnls.stream().map(vo -> new BigDecimal(vo.getWgz() == null ? "0" : vo.getWgz())).reduce(BigDecimal.ZERO, BigDecimal::add); System.out.println("sumYgz=" + sumYgz + ",sumWgz=" + sumWgz); //最大值 //Optional<T> max(Comparator<? super T> comparator); Optional<Dnl> max = dnls.stream().filter(vo -> vo.getYgz()!= null).max(new Comparator<Dnl>() { @Override public int compare(Dnl o1, Dnl o2) { BigDecimal b1 = new BigDecimal(o1.getYgz()); BigDecimal b2 = new BigDecimal(o2.getYgz()); BigDecimal subtract = b1.subtract(b2); return subtract.compareTo(BigDecimal.ZERO); } }); Dnl dnlmax = max.get(); System.out.println("最大有功总:" + dnlmax); //lamda表达式简写 Optional<Dnl> max1 = dnls.stream().filter(vo -> vo.getWgz() != null).max((o1, o2) -> new BigDecimal(o1.getWgz()).subtract(new BigDecimal(o2.getWgz())).compareTo(BigDecimal.ZERO)); Dnl dnlmax1 = max1.get(); System.out.println("最大无功总:" + dnlmax1); //最小值 //Optional<T> min(Comparator<? super T> comparator); Optional<Dnl> min = dnls.stream().filter(vo -> vo.getYgz()!= null).min(new Comparator<Dnl>() { @Override public int compare(Dnl o1, Dnl o2) { BigDecimal b1 = new BigDecimal(o1.getYgz()); BigDecimal b2 = new BigDecimal(o2.getYgz()); BigDecimal subtract = b1.subtract(b2); return subtract.compareTo(BigDecimal.ZERO); } }); Dnl dnlmin = min.get(); System.out.println("最小有功总:" + dnlmin); //lamda表达式简写 Optional<Dnl> min1 = dnls.stream().filter(vo -> vo.getWgz() != null).min((o1, o2) -> new BigDecimal(o1.getWgz()).subtract(new BigDecimal(o2.getWgz())).compareTo(BigDecimal.ZERO)); Dnl dnlmin1 = min1.get(); System.out.println("最小无功总:" + dnlmin1); } }

相关文章