Java List<Map<String,Object>>赋值给另外一个List<Map<String,String>> 利用类型擦除进行数据复制

开发过程中我们根据自己的业务场景可能遇到对list map进行数据类型的转换,比如

List<Map<String,Object>> 转换为 List<Map<String,String>>

我们可以使用类型擦除,进行数据的转换,如图所示

 数据接收正常

package com.example.demo.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author qiankun.hu
 * @version 1.0.0
 * @createTime 2022年05月06日 11:42:00
 * @Description list map 复制
 */
public class CopyTest {

    public static void main(String[] args) {
        List<Map<String, Object>> dtoList = new ArrayList<>();
        Map<String, Object> map = null;
        for (int i = 0; i < 4; i++) {
            map = new HashMap<>();
            map.put("id", i);
            map.put("age", "年龄" + i);
            map.put("name", "姓名" + i);
            dtoList.add(map);
        }

        List tempList = dtoList;
        List<Map<String, String>> voList = new ArrayList<>();
        voList = tempList;

        System.out.println(voList.size() + ":" + voList.get(0).get("age"));

    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Generics 泛型机制来实现的,可以在运行时对不同的类型进行操作和处理。它可以将类或者方法参数化,使得其可以适应不同的数据类型,提高代码的复用性和可读性。同时,Specification<> 还可以用来进行数据验证、筛选与过滤等功能,是一个非常实用的工具。 ### 回答2: Specification<> 是一种设计模式,它可以用来封装某个业务逻辑的条件判断,并提供一种灵活的方式来组合和扩展这些条件。 在使用 Specification<>模式时,我们首先需要定义一个 Specification 接口,该接口声明了一个用于判断条件是否满足的方法。然后我们可以根据具体的业务需求,实现不同的 Specification 类,每个类都表示一个特定的条件。 Specification 类可以根据需要实现多种逻辑操作,例如与、或、非等。这样,我们就可以通过组合 Specification 对象来创建出各种复杂的条件判断。 使用 Specification<> 模式的好处有多个。首先,它可以有效地将条件判断的逻辑与业务逻辑相分离,提高代码的模块化和复用性。其次,通过 Specification<> 模式,我们可以动态地组合和扩展条件,而无需修改已有的代码。这种灵活性使得代码更易于维护和扩展。 举个例子来说,假设我们有一个电商平台,用户可以进行商品筛选。我们可以定义一个 Specification 接口,其中包含一个用于判断某个商品是否满足筛选条件的方法。然后,我们可以实现多个具体的 Specification 类,例如价格范围、品牌、颜色等。最后,通过组合不同的 Specification 对象,我们就可以构建出各种复杂的商品筛选条件。 总的来说,Specification<> 模式是一种强大的条件判断封装机制,它可以帮助我们实现复杂的条件判断逻辑,提高代码的可维护性和可扩展性。 ### 回答3: Specification<> 是一个泛型接口,在软件开发中常用于定义和描述对象的规格或条件。 Specification<> 接口的定义如下: ``` public interface Specification<T> { boolean isSatisfiedBy(T item); Specification<T> and(Specification<T> other); Specification<T> or(Specification<T> other); Specification<T> not(); } ``` 在实际使用中,我们可以根据业务需求来实现自定义的 Specification<> 实现类,然后对对象进行规格判断、组合或反转。 1. `isSatisfiedBy(T item)` 方法用于判断给定的对象是否满足当前规格,返回一个布尔值。 2. `and(Specification<T> other)` 方法返回一个新的规格,表示当前规格与传入的规格同时满足的情况。 3. `or(Specification<T> other)` 方法返回一个新的规格,表示当前规格与传入的规格任意一个满足的情况。 4. `not()` 方法返回当前规格的反转规格,即满足当前规格的对象会被排除。 通过使用 Specification<> 接口,我们可以更加灵活地定义和组合对象的规格,用于数据过滤、查询以及验证等场景。 例如,我们可以定义一个根据年龄范围进行筛选的规格: ```java public class AgeSpecification implements Specification<User> { private int minAge; private int maxAge; public AgeSpecification(int minAge, int maxAge) { this.minAge = minAge; this.maxAge = maxAge; } @Override public boolean isSatisfiedBy(User user) { int age = user.getAge(); return age >= minAge && age <= maxAge; } @Override public Specification<User> and(Specification<User> other) { return new AndSpecification<>(this, other); } @Override public Specification<User> or(Specification<User> other) { return new OrSpecification<>(this, other); } @Override public Specification<User> not() { return new NotSpecification<>(this); } } ``` 然后可以使用该规格来筛选满足条件的用户: ```java Specification<User> ageSpecification = new AgeSpecification(18, 30); List<User> filteredUsers = users.stream() .filter(ageSpecification::isSatisfiedBy) .collect(Collectors.toList()); ``` 以上就是 Specification<> 的基本使用方法和示例。使用 Specification<> 可以提高代码的可维护性和复用性,同时降低代码的耦合度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值