Stream流日常使用 记录与总结

104 阅读1分钟
数据源 数据处理 数据收集
List<Human> humans;
List<Animal> animals;

animals.stream().map(Animal::getId).collect(Collectors.toList());
map:在animals列表中 取Animal其中的Id字段作为一个新List

humans.stream().filter(d -> ids.contains(d.getId)).collect(Collectos.toList());
filter:过滤出 humans列表的Id 存在于ids列表的对象集合

humans.stream().filter(d -> d.getAge().compareTo(BigDecimal.ZERO) > 0).collect(Collectos.toList());
compareTo:过滤出 humans列表中 年龄大于0的对象集合

humans.stream().sorted(Comparator.comparing(Human::getAge)).collect(Collectors.toList());
sorted:根据年龄进行升序排序

humans.stream().sorted(Comparator.comparing(Human::getAge).reversed()).collect(Collectors.toList());
sorted:根据年龄进行降序排序

humans.stream().limit(1).collect(Collectors.toList());
limit:取一条数据

humans.stream().map(Human::getName).distinct().collect(Collectors.toList());
distinct:去除重复的name 。注意点:去重最好放好stream流操作后面,如果放一开始则寓意变成去除对象重复,而不是name重复

humans.stream().collect(Collectos.groupingBy(Human::getName));
groupingBy:对年龄进行分组

Map<String,BigDecimal>  humanMap = humans.stream().collect(Collectos.groupingBy(Human::getName,Collectos.reducing(BigDecimal.ZERO,Human::getMoney,BigDecimal::add)));
groupingBy:对年龄进行分组后 对每个分组内的money进行求和

BigDecaimal totalPrice = list.stream().map(ProductA::getPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
对Bigdecimal求和。  这里BigDecimal::add  可替换为min max 

Human h =  humans.stream().min(Comparator.comparing(Human::getAge)).get();
求Human列表中 age 最大的对象

humans.filter(Objects::nonNull) / humans.filter(d -> Objects::nonNull(d.getAge))
过滤为null的字段


humans.stream().map(e -> {
    Women women = new Women();
    women.setName(e.getName());
    women.setAge(e.getAge);
    return women;
}).collect(Collectors.toList());
自定义map返回的类型