Stream流对返回数据列表中的单个属性进行更改

1.问题场景:对后端返回的用户列表中的每一条密码进行解密操作,并将记录返回给前端。

2.解决方法:1.使用Stream流中的peek方法 2.使用Stream流中的forEach方法

 @PostMapping(value = "/pageList")
    public Result<List<UserPageVO>> pageList(@Valid UserPageListParam pageListParam) {
        Page<User> page = this.userService.pageList(pageListParam);
        
        // 第一种方法
        List<UserPageVO> voList = page.stream().map(UserPageVO::new)
                .peek(p -> {
                    p.setPwd(PWUtils.pwDecryptStr(p.getPwd()));
                })
                .collect(Collectors.toList());
        
        
        // 第二种方法
//        List<UserPageVO> voList = //page.stream().map(UserPageVO::new).collect(Collectors.toList());
//        voList.stream().forEach(p -> {
//            p.setPwd(PWUtils.pwDecryptStr(p.getPwd()));
//        });
        return new Result(1, "获取成功", voList, page.getTotal());
    }

3.验证

数据库存放的是16进制的对称加密数据形式。

 解密后返回到前端的数据

好的,下面是如何通过 Java Stream API 将 `List<Map<String, Object>>` 中的一个特定字段提取出来,并将其值拼接成由逗号分隔的字符串。我们将代码分为几个步骤进行讲解。 ### 步骤 1: 定义输入数据 假设我们有一个包含 Map 的 List: ```java import java.util.*; public class Main { public static void main(String[] args) { // 示例数据 List<Map<String, Object>> list = Arrays.asList( new HashMap<>() {{ put("id", 1); put("name", "Alice"); }}, new HashMap<>() {{ put("id", 2); put("name", "Bob"); }}, new HashMap<>() {{ put("id", 3); put("name", "Charlie"); }} ); // 后续操作... } } ``` ### 步骤 2: 使用Stream获取指定键对应的值列表 接下来,我们可以从每个 Map 中提取出名为 `"name"` 字段的值(你可以根据实际情况更改这个键名),并收集到一个新的列表中。 ```java // 提取所有Map中的"name"键对应的值,并形成一个String类型的列表 List<String> namesList = list.stream() .filter(map -> map.containsKey("name")) // 确保存在该key防止空指针异常 .map(map -> (String) map.get("name")) .collect(Collectors.toList()); System.out.println(namesList); // 输出验证中间结果 [Alice, Bob, Charlie] ``` ### 步骤 3: 拼接为单个字符串 最后一步就是将上面得到的所有名字用逗号连接起来成为单一字符串了。 ```java // 把集合中的元素合并成一条以","分割开来的字符串 String result = String.join(",", namesList); System.out.println(result); // 最终输出 Alice,Bob,Charlie ``` 完整的示例程序如下所示: ```java import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // 数据准备 List<Map<String, Object>> list = prepareData(); // 转换过程拆解展示 System.out.print("原始数据:"); printMaps(list); List<String> nameStrings = extractFieldAsList(list,"name"); System.out.println("\n提取后的名单:" + nameStrings); String joinedNames = joinWithComma(nameStrings); System.out.println("\n最终生成的结果串:\n" + joinedNames); } private static List<Map<String,Object>> prepareData(){ return Arrays.asList( new HashMap<>(){{put("id",1);put("name","Alice");}}, new HashMap<>(){{put("id",2);put("name","Bob");}}, new HashMap<>(){{put("id",3);put("name","Charlie");}} ); } /** * 打印映射列表的内容以便于查看转换前的数据结构 */ private static <K,V>void printMaps(List<Map<K,V>>maps){ maps.forEach(System.out::println); } /** * 根据给定的关键字 key 来过滤并将相应的 value 放入新的 string 类型链表之中。 * *@param maps 输入源——即我们的list<Map> *@param key 表明我们要从中抽取出来的那个属性名称. *@return 包含所有对应value值得新列表 */ private static List<String>extractFieldAsList(List<Map<String,Object>>maps,String key){ return maps.stream().filter(m->m.containsKey(key)) .map(m->(String)m.get(key)) .toList(); } /*** * 接受一个字符串序列作为参数然后返回它们之间用逗号相连的新字符串实例 * * @param parts 待组合的一系列部分 * @return 组合完毕之后的整体形式 */ private static String joinWithComma(List<String>parts){ if(parts==null||parts.isEmpty()){ throw new IllegalArgumentException("提供的部件为空!"); }else{ return String.join(", ",parts); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值