当前位置: 首页 > 知识库问答 >
问题:

springboot - 不同list泛型间转换?

蔚楷
2023-07-05

前言

代码主要是实现将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);
        });

共有2个答案

仰英发
2023-07-05

用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());
欧阳成弘
2023-07-05

使用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());
 类似资料:
  • 以下代码之间有什么区别吗? 和 如果是的话,有人能解释一下区别以及何时使用什么?

  • 我试图在java中实现不同类型之间的转换器:我有一个超级类foo,有2个子类: fo1和fo2,我也有2个不相关的其他类bar1和bar2,我试图实现一个转换器从bar1到fo1和bar2to fo2(与之相反)。 因为我在这里有继承,所以我想应该创建一个泛型类型的接口(将是bar1或bar2),它将定义转换所需的函数,我还想让转换器成为bar1和bar2的通用转换器,我认为它应该以某种方式使用接

  • 问题内容: 我从UDP套接字获取了一个字节片(),并希望将其视为整数片(),而无需更改基础数组,反之亦然。在C(++)中,我只是在指针类型之间进行转换;我将如何在Go中执行此操作? 问题答案: 正如其他人所说,在Go中强制转换指针被认为是错误的形式。这是正确的Go方式示例以及与C数组转换等效的示例。 警告:所有代码未经测试。 在此示例中,我们使用包将每组4个字节转换为。这样更好,因为我们指定了字节

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 问题内容: 这是我的问题:鉴于这些课程 此代码编译: 并且这不: 是什么赋予了? 更新: 此代码可在Java 8中编译。显然是由于“改进的类型推断”。 问题答案: 在第一个示例中,调用的推断类型为,显然可以将其分配给相同类型的变量。 在第二个示例中,右侧的类型为。虽然 是 分配给, 不 分配给。它可以分配给。 其原因与a 不可分配给的原因相同。如果是这样,它将使以下(非类型安全的)代码成为可能:

  • 问题内容: 我正在编写一些Swift代码,其中有一个包含通用类型的数组: 稍后在我的代码中,我需要确定存储在数组中的类型。我尝试使用文档中描述的类型转换技术(尽管泛型没有使用过)。 上面的switch语句在编译时导致以下错误: 发出IR SIL功能@ _TFC19Adder_Example Mac6Matrix9transposeUS 7ElementfGS0_Q__FT_GSqGS0_Q___以