@Test
public void test034(){
List<Car> all=new ArrayList<Car>();
all.add(new Car("nissan",15,15.5));
all.add(new Car("nissan",9,13.0));
all.add(new Car("honda",20,12.8));
all.add(new Car("pansonic",25,2.8));
all.add(new Car("benz",100,50.8));
all.add(new Car("BMW",85,60.5));
//多字段操作
all.stream().map(car->{
System.out.print("车名:"+car.getPname()+" 车总价(万元):");
return car.getAmouter()*car.getPrice();
}).forEachOrdered(System.out::println);
System.out.println("------------------------------");
//多字段操作,并求和
double result =all.stream().map(car->{
return car.getAmouter()*car.getPrice();
}).reduce((sum,x)->sum+x).get();
System.out.println("购车总金额:"+result);
System.out.println("------------------------------");
//单字段求和,处理double类型
double sum = all.stream()
.mapToInt(p -> p.getAmouter())
.sum();
System.out.println("购车总数量double:"+sum);
System.out.println("------------------------------");
//处理BigDecimal的使用,方法一
BigDecimal amounts = all
.stream()
.map(item -> new BigDecimal(item.getAmouter()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
amounts = amounts.setScale(1, BigDecimal.ROUND_UP);
System.out.println("购车总数量BigDecimal:"+amounts);
//统计操作,summaryStatistics
DoubleSummaryStatistics result2=all.stream().mapToDouble(myCar->{
return myCar.getAmouter()*myCar.getPrice();
}).summaryStatistics();
System.out.println("result2中的内容:"+result2);
System.out.println("------------------------------");
System.out.println("统计量getCount: "+result2.getCount());
System.out.println("最大值getMax: "+result2.getMax());
System.out.println("最小值getMin: "+result2.getMin());
System.out.println("总和getSum: "+result2.getSum());
System.out.println("平均值getAverage: "+result2.getAverage());
//allMatch
System.out.println("------------------------------");
boolean isAdult = all.stream().allMatch(car -> car.getPrice() >= 2);
System.out.println("是否全部满足条件:"+isAdult);
//anyMatch
System.out.println("------------------------------");
boolean hasBMW = all.stream().anyMatch(car -> "BMW".equals(car.getPname()));
System.out.println("是否任一满足条件:"+hasBMW);
//noneMatch
System.out.println("------------------------------");
boolean noneBMW = all.stream().noneMatch(car -> "BMW2".equals(car.getPname()));
System.out.println("是否没有满足条件:"+noneBMW);
//findFirst
System.out.println("------------------------------");
Optional<Car> optCar = all.stream().filter(car -> "nissan".equals(car.getPname())).findFirst();
System.out.println("查询第一台Nissan:"+optCar.get());
//findAny
System.out.println("------------------------------");
Optional<Car> anyCar = all.stream().filter(car -> "nissan".equals(car.getPname())).findAny();
System.out.println("查询任意一台Nissan:"+anyCar.toString());
//maxBy
System.out.println("------------------------------");
Optional<Car> upperPrice = all.stream().collect(Collectors.maxBy(Comparator.comparing(Car::getPrice)));
List<Car> presentCar=new ArrayList();
upperPrice.ifPresent(presentCar::add);
System.out.println("汽车最高单价:"+presentCar.get(0).getPrice());
//summingInt
System.out.println("------------------------------");
int totalCount = all.stream().collect(Collectors.summingInt(Car::getAmouter));
System.out.println("购买汽车总数量:"+totalCount);
//拼接字符串,名字
System.out.println("------------------------------");
String names = all.stream().map(Car::getPname).collect(Collectors.joining(", "));
System.out.println("名字拼接成字符串:"+names);
}