Java——List合并


 按照pid、id合并两个集合

package cn.swsk.xbry.mess.controller;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * List合并
 * @author css
 * @data 2019/7/11 15:28
 */
public class JoinList<T> {
    private List<T> p;
    private List<?> c;

    private Field pf;
    private Field plf;
    private Field cf;

    private Field getField(Class<?> clazz, String name) {
        try {
            Field f = clazz.getDeclaredField(name);
            f.setAccessible(true);
            return f;
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void setParent(List<T> p, String name, String children) {
        this.p = p;
        Class<?> clazz = p.get(0).getClass();
        this.pf = getField(clazz, name);
        this.plf = getField(clazz, children);
    }

    public void setChild(List<?> c, String name) {
        this.c = c;
        Class<?> clazz = c.get(0).getClass();
        this.cf = getField(clazz, name);
    }

    public List<?> join() throws IllegalAccessException, InstantiationException {
        for (T t: p) {
            Object pv = pf.get(t);
            for (Object o: c) {
                Object cv = cf.get(o);
                if(pv.equals(cv)){
                    Collection list = (Collection<?>) plf.get(t);
                    if(list == null){
                        list = new ArrayList();
                        list.add(o);
                        plf.set(t, list);
                    } else {
                        list.add(o);
                    }
                }
            }
        }
        return this.p;
    }

    static class A{Integer id; String name;List<B> list;

        @Override
        public String toString() {
            return "A{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", list=" + list +
                    '}';
        }
    }
    static class B{Integer pid; String name;

        @Override
        public String toString() {
            return "B{" +
                    "pid=" + pid +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        A a = new A();
        a.id = 3;
        a.name = "a";

        B b = new B();
        b.pid = 3 ;
        b.name = "b";


        List<A> al = new ArrayList<>();
        List<B> bl = new ArrayList<>();
        al.add(a);
        bl.add(b);

        JoinList<A> test = new JoinList<>();
        test.setParent(al, "id", "list");
        test.setChild(bl, "pid");
        System.out.println(test.join());
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM