• Stream流系列---【Jdk1.8新特性Stream流的常见的快速优雅用法】


    1.如何快速优雅格式化list中一个对象中的date类型的日期格式为string,并返回?

    public PageResult<Map<String, Object>> findPageByCondition(QueryPageBean queryPageBean){
            String queryString = queryPageBean.getQueryString();
            Page<User> page = new Page<>(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());
            QueryWrapper<User> qw = new QueryWrapper<>();
            qw.like(StringUtils.isNotBlank(queryString),"username",queryString).or().like(StringUtils.isNotBlank(queryString)
                    ,"tel",queryString);
            userMapper.selectPage(page,qw);
            List<User> userList = page.getRecords();
            //快速把user类中的Date类型的createTime格式化为String并返回
            List<Map<String, Object>> userMapList = userList.stream().map(user -> {
                //这里引用了hutool中的BeanUtil
                Map<String, Object> userMap = BeanUtil.beanToMap(user);
                userMap.put("createTime", DateUtil.formatDate(user.getCreateTime()));
                return userMap;
            }).collect(Collectors.toList());
            return new PageResult<>(ResultCode.SUCCESS.getCode(), Msg.SELECT_OK,page.getTotal(),userMapList);
        }

    <!--常用工具类-->
    <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.4</version>
    </dependency>

    2.如何快速把一个List<User>中存储的User转换为User的一个属性为key,对象本身为value的Map<String,User>集合?

    List<User> userList = userMapper.findAll();
    //第一种写法(这里我以id为key,故不会存在重复或者为空的情况) Map
    <Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId,user->user));

    //第二种写法(这里我以id为key,故不会存在重复或者为空的情况)
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId,Function.identity()));

    //第三种写法(这里我以User的name为key,这时候先判空,再指定key重复时的处理规则-(k1,k2)->k2,这个合并函数的意思是:当两个name重复时,选第二个)
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(k1,k2)->k2));

    //第四种写法(在第三种的基础上,可以指定Map<Integer,User>的具体实现)
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(k1,k2)->k2,LinkedHashMap::new));

    //第五种写法(若name的值可能为空时,可以过滤掉可能为空的值)
    Map<Integer,User> userMap = userList.stream().filter(user -> user.getName()!=null).collect(Collectors.toMap(User::getId,Function.identity()));

    拓展:

    //第三种写法分三种情况
    //第1种:value值重复时,要求取一个
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(k1,k2)->k2));
    //第2种:value值重复时,两个都要,返回的value为String类型 
    Map<Integer,String> userMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName,(k1,k2)->k1+","+k2));

    //第3种:value值重复时,两个都要,返回的value为集合类型
    Map<String, List<String>> userMap = userList.stream().collect(Collectors.toMap(Person::getId, p -> {
    List<String> getNameList = new ArrayList<>();
    getNameList.add(p.getName());
    return getNameList;
    }, (
    List<String> k1, List<String> k2) -> { k1.addAll(k2); return k1;
    }
    ));
    愿你走出半生,归来仍是少年!
  • 相关阅读:
    jqyery dataTable 基本用法
    linux 下两台电脑之间ssh无密码连接
    javascript 高级程序设计 十二
    javascript 高级程序设计 十一
    javascript 高级程序设计 十
    小程序笔记
    表单提交 fastadmin form
    fastadmin表单验证
    sbadmin表单事件
    fastadmin模态框(弹出框)
  • 原文地址:https://www.cnblogs.com/hujunwei/p/14191321.html
Copyright © 2020-2023  润新知