最近遇到一个任务:
需要把A集合数据转成 B集合的形式:
A集合:
B集合:
代码:
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());// 使用映射设置 sfidString 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);}}
}
打印结果: