Java基础,写一个flat函数

本文介绍了如何在Java中利用flat函数思想处理数组成员变量的问题。通过遍历A类的C对象数组的x字段和B类的D对象数组的y字段,将它们转换为单一数组。关键在于使用接口实现延迟操作,使得在foreach循环中可以灵活处理.x和.y。代码示例展示了具体的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这样一个需求,在一个A类中,有个一对象C数组arr,,对象里面有一个字段叫做x;在一个B类中,有一个对象D数组arr,对象里面有一个字段叫做y;有点晕,我们来看看对应的JavaBean
A.java

public class A{
    public List<C> arr = new ArrayList<>();

    static class C{
        public int x = 1;
    }
}

B.java

public class B {
    public List<D> arr = new ArrayList<>();

    static class D{
        public int y = 2;
    }
}

现在的需求是,写一个函数来构造一个数组,具体是这样的,就是这个函数能遍历A类的C,把C中的x变成一个数组,也能够遍历B类的D,把D中的y变成一个数组。
借用flat函数的思想,我们可以这样想,问题的关键在与当我们用foreach遍历到对象的时候不可以去获取成员变量,就是我不知道是.x还是.y又要求用一个方法完成,所以接口大法来救你了,看代码吧。

MyClass.java

public class MyClass {
    public static void main(String args[]) {
        MyClass myClass = new MyClass();
        A a = new A();
        A.C c = new A.C();
        a.arr.add(c);
        a.arr.add(c);
        a.arr.add(c);

        B b = new B();
        B.D d = new B.D();
        b.arr.add(d);
        b.arr.add(d);
        b.arr.add(d);

        List list = myClass.traverseArray(a.arr, new UtilFlat<A.C>() {
            @Override
            public Object flat(A.C o) {
                return o.x;
            }
        });

        for (Object i:
             list) {
            System.out.println(i);
        }

        list = myClass.traverseArray(b.arr, new UtilFlat<B.D>() {
            @Override
            public Object flat(B.D o) {
                return o.y;
            }
        });

        for (Object i:
                list) {
            System.out.println(i);
        }
    }

    private List traverseArray(List objectList, UtilFlat iFlat) {
        ArrayList<Object> list = new ArrayList<>();
        for (Object o :
                objectList) {
            list.add(iFlat.flat(o));
        }
        return list;
    }

    public interface UtilFlat<T>{
        Object flat(T o);
    }
}

总结:接口一定是延迟操作,把当前不能决策的操作延迟到实现的地方。

PS:感谢老大的教育之恩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值