List集合格式转换

最近遇到一个任务:

需要把A集合数据转成 B集合的形式:

A集合:

B集合:

代码:

java 复制代码
package com.example.juc.test;

import com.example.juc.entity.Ld;
import com.example.juc.entity.Student;

import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author 
 * @Date Created in  2023/12/26 14:43
 * @DESCRIPTION:
 * @Version V1.0
 */

public class 测试行转列 {
    private static final Map<String, String> SFID_MAPPING = new HashMap<>();

    // 初始化映射关系
    static {
        SFID_MAPPING.put("ywjbrmc", "1");
        SFID_MAPPING.put("ywfgld", "2");
        SFID_MAPPING.put("ywzzld", "3");
        SFID_MAPPING.put("fgxld", "4");
        SFID_MAPPING.put("zyxld", "5");
    }

    public static void main(String[] args) {
   





        List<Ld> list = new CopyOnWriteArrayList<>();

        list.add(new Ld( "龙德(longyd3)", "夏天(longyd3)", "黄美(hyanm)", "王雄(wgx)", "黄美(hyanm)"));
        list.add(new Ld( "", "", "王国雄(wgx),黄美(hanm),龙永德(longyd3)", "", ""));
        list.add(new Ld( "", "", "", "黄美(hanm)", ""));
        list.add(new Ld("", "", "", "", "黄美(hanm)"));
        list.add(new Ld("", "", "", "", "黄燕美(hanm)"));
        List<Student> okList = new ArrayList<>();
        //遍历第一个集合
        for (Ld ld : list) {
            // 在这里处理 ld 对象
            // 使用反射获取所有字段
            Field[] fields = Ld.class.getDeclaredFields();
            String id  = UUID.randomUUID().toString();
            for (Field field : fields) {
                // 设置可访问,因为字段可能是 private 的
                field.setAccessible(true);
                try {
                    Object value = field.get(ld);
                    HashMap<String, Object> map = new HashMap<>(16);

                    if (value != null && !value.toString().isEmpty()) {
                        Student student = new Student();
                        String name = field.getName();
                        map.put(name,value);

                        student.setPzryId(id);
                        student.setNetId(map.get(name).toString());
                        // 使用映射设置 sfid
                        String sFid = SFID_MAPPING.get(name);
                        if (sFid != null) {
                            student.setSfid(sFid);
                        }
                        okList.add(student);
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }

        }
        List<Student> updateList = new CopyOnWriteArrayList<>();
        List<Student> errorList = new CopyOnWriteArrayList<>();
        System.out.println("====================原本转好的集合============================");
        for (Student stu : okList){
//

            String netId = stu.getNetId();

            String regex = "^[^()]+\\([^()]+\\)$";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(netId);
            // 如果不符合格式,则打印该 Student 对象
            if (!matcher.matches()) {
                errorList.add(stu);
                String[] split = stu.getNetId().split(",");

                for (int i = 0; i < split.length; i++) {
                    Student student = new Student();
                    student.setPzryId(stu.getPzryId());
                    student.setNetId(split[i]);
                    student.setSfid(stu.getSfid());
                    updateList.add(student);
                }
            }
            System.out.println(stu);
        }
        System.out.println("--------------------------修改后的数据-------------------------------------");
        for (Student s : updateList){
            System.out.println(s);
        }
        okList.addAll(updateList);
        System.out.println("--------------------------不符合规则的数据-------------------------------------");
        for (Student s : errorList){
            System.out.println(s);
        }
        okList.removeAll(errorList);
        System.out.println("--------------------最后的数据------------------------------------");

        for (Student s : okList){
            System.out.println(s);
        }
    }
}

打印结果:

相关推荐
Csvn3 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽4 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817536 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱20 小时前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi001 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn1 天前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵2 天前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup112 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill