我不认为标准JDK提供这个(Java< = 7).如果您想要一个适用于Java 7且不涉及编码的解决方案,您可以使用Guava及其Lists.transform方法.
它看起来像这样:
List myList = getListFromSomePlace();
int frequency = Collections.frequency(Lists.transform(myList, new Function() {
@Override
public MyObject apply(Foo input) {
return input.getInternalFoo();
}
}), myCriteria);
如果您仍然认为不值得为此添加第三方库,您仍然可以编写自己的Function接口和实用程序类,该实用程序类提供转换List< T>的方法.到列表< U>提供了适用的映射.这不是很难,也不会占用太多代码.
编写自己的实现将允许您一次完成此操作.
static int frequency(Collection coll, Function super T, ? extends U> mapper, U criteria) {
Objects.requireNonNull(coll);
Objects.requireNonNull(mapper);
Objects.requireNonNull(criteria);
int frequency = 0;
for(T t : coll) {
if(criteria.equals(mapper.apply(t))) {
frequency++;
}
}
return frequency;
}