为什么我的java编译器认为初始化的数组是一个ArrayList?

g52tjvyc  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(132)

我在Java中使用stream reduce,我写了以下代码:

ArrayList<CacheElement>[] initialArrayList = initArrayWithArrayList(newCacheCapacity);
        Arrays.stream(cache).reduce(initialArrayList, (acc, cacheChainingList) -> {
            cacheChainingList.forEach(cacheElement -> {
                int index = calcIndexByKey(cacheElement.getKey(), newCacheCapacity);
                acc[index].add(cacheElement);
            });
            return acc; // return the updated accumulator
        });

我的编译器将我的累加器(acc)引用为Arraylist类型,而不是原始数组。我希望它将acc识别为ArrayList[]类型。请帮我弄清楚:)
我试图访问acc作为数组,但得到一个编译错误:
应为数组类型;发现:'java.util.ArrayList<org.example.myCacheService.cache.CacheRepository.CacheElement>'

ikfrs5lh

ikfrs5lh1#

这里使用的reduce方法签名如下:

public abstract T reduce( T identity, BinaryOperator<T> accumulator )

T是您正在流的类型,在本例中,ArraysList,因为我相信缓存是一个ArrayList数组。
因此,在定义BinaryOperator的lambda语句中:(acc,cacheChainingList)-〉{...},
acc的类型为T,即ArrayList

相关问题