**Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合操作或者大批量的数据操作,提高了编程效率和代码可读性。
Stream的原理:将要处理的元素看做一种流,流在管道中传输,并且可以在管道的节点上处理,包括过滤筛选、去重、排序、聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。**
1.排序
// 升序
list.stream().sorted(Comparator.comparing(T::getPrice)).collect(Collectors.toList());
//降序
list.stream().sorted(Comparator.comparing(T::getPrice).reversed()).collect(Collectors.toList());
//多重list
Collection<List> cList = list.stream().collect(Collectors.groupingBy(s -> s.getPrice(), Collectors.toList())).values();
List<List> cartItems = new ArrayList<>(cList);
cartItems.stream().sorted((x,y) -> { return x.get(0).getPrice().compareTo(y.get(0).getPrice());}).collect(Collectors.toList())
2.分组
Map<String,List> map= list.stream().collect(Collectors.groupingBy(T::getType));
3.过滤
list.stream().filter(s->s.getGender() && s.getHeight() >= 1.8).collect(Collectors.toList());
4.求和
// int、double、long:
Double sum = list.stream().mapToDouble(T::getAmt).sum();
//BigDecimal:
BigDecimal sum =list.stream().map(T::getAmt).reduce(BigDecimal.ZERO,BigDecimal::add);
5.取某个字段最大值
T t = list.stream().max(Comparator.comparing(T::getNumber)).get();