Stream流的使用(可以解决工作中80%的此类问题)

发布于:2022-10-21 ⋅ 阅读:(635) ⋅ 点赞:(0)

List<Object> listObject = new ArrayList<>();
Object object = new Object();
Object:实体对象

注:复杂逻辑建议写sql进行统一管理

将一个对象集转为另一个对象集名称相同字段可以不用赋值:

        listObject.forEach(p->{
        Object object = new Object();
        BeanUtils.copyProperties(p,object);
        object.setId(p.getId);
        });

List提取某个字段集:
获取listObject对象的Id属性集合 distinct(去重)

List<String> strList = listObject.stream().map(Object::getId).distinct().collect(Collectors.toList());

List提取某个字段获取此字段的总计:
获取listObject对象的orderNum属性的总计

total = listObject.stream().mapToInt(Object::getOrderNum).sum();

将List对象转成Map:
如果null==e.getOrderCode()则value""

Map<String, String> map= listObject.stream().collect(Collectors.toMap(Object::getId, e -> (null==e.getOrderCode() ? "" : e.getOrderCode())));

排序:
sorted正序排序 reversed倒序排序

//正序
List<Object> listObject = listObject.stream().sorted(Comparator.comparing(Object::getId)).collect(Collectors.toList());
//倒序
List<Object> listObject = listObject.stream().sorted(Comparator.comparing(Object::getId).reversed()).collect(Collectors.toList());

分组:
groupingBy分组

Map<Long, List<Object>> mapList = listObject
        .stream()
        .collect(Collectors.groupingBy(p -> p.getId(), Collectors.toList())); 

过滤:
filter过滤

listObject = listObject.stream().filter(p ->
        Objects.equals(p.getId(),p.getOrderCode)).collect(Collectors.toList());

过滤返回重复数据:

List<String> responseList = listObject.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()))
        .entrySet().stream().filter(e -> e.getValue() > 1)
        .map(Map.Entry::getKey).collect(Collectors.toList());     

返回第一条数据:
findFirst查询第一条数据,orElse如果不存在则返回nulll

Object object = listObject.stream().sorted(Comparator.comparing(Object::getId).reversed()).findFirst().orElse(null);

扩展:
@云深i不知处
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到