List的流操作结合hutool的最优雅处理,处理前端所需要的参数定制化返回给前端

前言:

java用于服务器端是很方便的,特别是对于前后端分离的项目来说.经常需要对接前端写接口,有时候前端要接口必须得一次性查出来数据,那就得处理从数据库查询到的数据了,下面就是如何更加高效更加优雅的处理数据,这里用到了hutool的方法,这篇文章主要就是让大家如何快速的去处理自定义前端需要的类,把数据快速封装上,并且处理数组字符串.

正文:

1.首先就得需要java.util.List这个包下的List数组

2.List类型有两个比较好用的,第一个就是进行流操作最后再收集回来具体代码看下面这个例子

       LambdaQueryWrapper<Function> wrapper = new LambdaQueryWrapper<>();
       wrapper.eq(Function::getStatus, 1);
       wrapper.orderByAsc(Function::getSort);
       List<Function> list = functionService.list(wrapper);
       list.stream().map(function -> {
           function.setPicture(getUrl(function.getPicture()));
           return function;
       }).collect(Collectors.toList());

上面的function.setPicture(getUrl(function.getPicture()));中的getUrl()方法就是用来解析原来这个字段存的数组字符串对象,就是字符串是数组的,数组里面是对象,但前端只需要这里面对象的一个url参数,并且对这个参数处理好拼接全路径返回给前端,怎么样还是蛮简单的吧,格式都一样,你只需要更改map方法里面的内容就好了

3.可能通过上面你还是觉得麻烦,是因为这里处理的不多就只有一个字段,下面这里是处理两个字段的看一下代码优雅程度

       LambdaQueryWrapper<Resort> wrapper = new LambdaQueryWrapper<>();
       wrapper.eq(Resort::getStatus, 1);
       if ("是".equals(hot)) {
           wrapper.eq(Resort::getHot, "是");
       }
       wrapper.orderByAsc(Resort::getSort);
       List<Resort> list = resortService.list(wrapper);
       List<ResortDTO> resortDTOS = BeanUtil.copyToList(list, ResortDTO.class);
       resortDTOS.stream().map(resortDTO -> {
           resortDTO.setPicture(getUrl(resortDTO.getPicture()));
           return resortDTO;
       }).collect(Collectors.toList());

上面这个操作是直接封装好一个DTO类,这个类只返回给前端他需要的字段,那就可以使用hutool的数组转换,BeanUtil.copyToList(list, ResortDTO.class);很方便前面一个参数就是被转换的数组,后面是需要转换成的数组泛型反射,怎么样,就一行代码直接就转换过去了,而且再加上使用list的流处理,直接就把里面的数组替换掉

4.下面还有一个是使用hutool的类型转换还是使用BeanUtil类型

       Resort byId = resortService.getById(id);
       ResortDetailsDTO dto = BeanUtil.copyProperties(byId, ResortDetailsDTO.class);
       dto.setImagesList(getUrlList(byId.getImages()));
       dto.setPicture(getUrl(byId.getPicture()));

上面这些代码就是直接使用hutool的类型转换,这次不是数组的了,是普通类的转换,然后再加上自定义的类型转换工具类,就能直接转换里面的参数,简直不要太方便

后记:

通过上面的例子是不是感觉list的流好复杂,要是我不去修改list数组里面的数据,我只是获取里面的数据然后封装到新的数组里面去,那岂不是很方便吗看一下我里面用到的getUrl()方法封装的是什么

   public static List<String> getUrlList(String images) {
       ArrayList<String> urlList = new ArrayList<>();
       List<PhotoUtilDTO> list = JSONUtil.parseArray(images).toList(PhotoUtilDTO.class);
       list.forEach(photoUtilDTO -> {
           urlList.add("http://xxx.xxx.cn" + photoUtilDTO.getUrl());
       });
    }

上面的代码里面我只需要从字符串数组获取每个数组中的一个url参数然后进行封装,我并不需要修改原来的list集合,那就不需要用到List的stream().map()方法,咱们只需要使用List的forEach()方法就行,就像上面那样,如果只有一行代码进行处理逻辑的话,我们还能把代码简化成lambda表达式,就像下面这个样子

   public static List<String> getUrlList(String images) {
       ArrayList<String> urlList = new ArrayList<>();
       List<PhotoUtilDTO> list = JSONUtil.parseArray(images).toList(PhotoUtilDTO.class);
       list.forEach(photoUtilDTO -> urlList.add("http://xxx.xx.cn" + photoUtilDTO.getUrl()));
       return urlList;
   }

是不是感觉代码很优雅,那我们就可以进行自己的封装了

如果我的博客帮助到了您,您可以到我的博客https://blog.csdn.net/weixin_57228276或者微信公众号搜索幸识SQ,在那里可以找到我,里面也有更多的优秀文章

你可能感兴趣的:(list,状态模式)