List懒加载(批量模式)

/**
*    继承自AbstractList,不支持修改操作.如果进行了remove,下面就难以通过indexOf找到对应的value了
*/
public class LazyList<K,T> extends AbstractList<T>{
        private List<T> values;
        LazyList(Function<List<K>, List<T>> batchLoader, List<K> keys,Class<T> clazz) {
            this.values=keys.stream().map(k->(T) Proxy.newProxyInstance(clazz.getClassLoader(),
                    new Class[]{clazz},
                    (o, method, objects) -> {
                        var targetMethod=Stream.of(k.getClass().getMethods())
                                .filter(m->m.getName().equals(method.getName()))
                                .findAny();
                        if(targetMethod.isPresent()){
                            return ReflectionUtils.invokeMethod(targetMethod.get(),k);
                        }else{
                            -- 进行切换
                            values= batchLoader.apply(keys);
                            return ReflectionUtils.invokeMethod(method,values.get(keys.indexOf(k)));
                        }
                    })).collect(Collectors.toList());
        }

        @Override
        public T get(int i) {
            return values.get(i);
        }
        @Override
        public int size() {
            return values.size();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值