前言:
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
,在那里可以找到我,里面也有更多的优秀文章