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,所以加载原图就不考虑了,太慢。所以就只使用缩略 ...