@Override public List<IStatsProducer> getProducers(IProducerFilter... filters) { if (_cachedProducerList==null) buildProducerCacheFromScratch(); List <IStatsProducer> ret = new ArrayList<>(); @SuppressWarnings("unchecked") List<ProducerReference> workCopy = (List<ProducerReference>)((ArrayList<ProducerReference>)_cachedProducerList).clone(); for (ProducerReference p : workCopy){ IStatsProducer pp = p.get(); boolean fit = true; if (pp==null) continue; for(IProducerFilter filter: filters) if (!filter.doesFit(pp)){ fit = false; break; } if(fit) ret.add(pp); } return ret; }