springboot - 不同list泛型间转换?
问题描述:
前言
代码主要是实现将redis中存储的数据(Key 的格式为 cake_蛋糕分类id:蛋糕id,value 为一个实体类对象格式的 Json 字符串;使用StringRedisTemplate存储)获取到list中
代码
完整代码
package org.lanqiao.service; import cn.hutool.json.JSON; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import org.lanqiao.entity.CakeInfo; import org.lanqiao.mapper.CakeInfoDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; @Service public class CakeInfoServiceImpl implements CakeInfoService { @Autowired CakeInfoDao cid; @Autowired StringRedisTemplate srt; @Override public List<CakeInfo> findCakeInfo(int cakeClassId) { /** * Find all keys matching the given pattern. */ String keypattern = "cake_" + cakeClassId + ":*"; Set<String> keys = srt.keys(keypattern); System.out.println("keys is" + keys); List<CakeInfo> cakeInfoList = new ArrayList<>(); List<String> list = Arrays.asList(keys.toArray(new String[0])); list.forEach((s) -> { /** * 利用hutool工具进行类型拷贝 */ CakeInfo bean = JSONUtil.toBean((JSONObject) JSONUtil.parse(srt.opsForValue().get(s)),CakeInfo.class); cakeInfoList.add(bean); }); return cakeInfoList; } }
其中下面的代码是使用hutool工具实现的拷贝,想问一下如果要求不用任何第三方工具如何实现不同list泛型间转换?如list<String>
与list<CakeInfo>
转化
list.forEach((s) -> { /** * 利用hutool工具进行类型拷贝 */ CakeInfo bean = JSONUtil.toBean((JSONObject) JSONUtil.parse(srt.opsForValue().get(s)),CakeInfo.class); cakeInfoList.add(bean); });
第 1 个答案:
使用jackson 来转换
ObjectMapper objectMapper = new ObjectMapper(); List<Cake> cakes = cakeJsonStrings.stream() .map(jsonString -> { try { return objectMapper.readValue(jsonString, Cake.class); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } }) .filter(Objects::nonNull) .collect(Collectors.toList());
第 2 个答案:
用ObjectMapper来实现这个功能的代码:
import com.fasterxml.jackson.databind.ObjectMapper; // ... list.forEach((s) -> { try { ObjectMapper mapper = new ObjectMapper(); CakeInfo bean = mapper.readValue(srt.opsForValue().get(s), CakeInfo.class); cakeInfoList.add(bean); } catch (IOException e) { e.printStackTrace(); } });
List<CakeInfo> cakeInfoList = list.stream() .map(s -> { try { return new ObjectMapper().readValue(srt.opsForValue().get(s), CakeInfo.class); } catch (IOException e) { throw new RuntimeException(e); } }) .collect(Collectors.toList());
用Electron做的本地图片管理器, 不考虑网络图片的情况,怎样快速加载图片的缩略图呢?我的图片一般在10M左右,最大比如psd的有200M,所以加载原图就不考虑了,太慢。所以就只使用缩略 ...