1.遍历forEach()操作
list.forEach(item->{
});
2.stream()流操作
2.1 去重 关键字:distinct
list = list.stream().distinct().collect(Collectors.toList());
2.2 排序 根据对象的某个属性排序 关键字:sorted
list = list.stream().sorted(((o1, o2) -> o2.getId()-o1.getId())).collect(Collectors.toList());
简化版: list.sort(((o1, o2) -> {return o2.getId()-o1.getId();}));
多字段排序: list.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));
说明: o2.getId()-o1.getId()的o2和o1的顺序决定升序或是降序
2.3 过滤 根据对象的某个属性过滤 关键字:filter
list = list.stream().filter(item->item.getId()>5).collect(Collectors.toList());
2.4 提取 取出对象的某个属性的集合 关键字:map
List<Integer> idList = list.stream().map(user-> user.getId()).collect(Collectors.toList());
List<Integer> idList = list.stream().map(User::getId).collect(Collectors.toList());
说明:提取有两种写法 ,第一种是Function表达式,可以加自己的判断
2.5 统计 获取对象某个属性的平均值 最大最小值登等 关键字: mapToDouble() mapToInt() mapToLong() average max min sum
num = list.stream().mapToInt(item -> item.getId()).average();
num = list.stream().mapToInt(item -> item.getId()).max();
num = list.stream().mapToInt(item -> item.getId()).min();
大数据计算: BigDecimal num= list.stream().map(User::getNum).reduce(BigDecimal.ZERO, BigDecimal::add); 说明: 需要注意null的情况,需要先过滤,或者重写方法
若要获取最值对应的对象:
Comparator<User> comparator = Comparator.comparing(item -> item.getId);
User user = list.stream().max(comparator).get();
2.6 分组 根据对象的某个属性分组 关键字:Collectors.groupingBy
list.stream().collect(Collectors.groupingBy(item -> item.getId()));
说明: 还可以多重分组或者是多字段分组或者是统计分组后的某个属性的最大最小值等 关键字:Collectors.summarizingInt
2.7 转map
Map map = list.stream().collect(Collectors.toMap(item -> item.getId(),a -> a,(k1,k2)->k1));
说明:当key重复时会报错,所以需要加上 (k1,k2)->k1),表示有重复时,取k1的值
lambda加list联合使用,让你的代码花里胡哨