基于模板的解决方案
像这样定义一个模板:
public class ConvertListTemplate<A, B>
{
public List<B> convert( List<A> list ) {
List<B> result = new ArrayList<B>();
for( A a : list ) {
result.add(convertElement(a));
}
return result;
}
public abstract B convertElement(A element);
}
然后在您的代码中执行此操作:
List<Integer> result = new ConvertListTemplate<SomeObject, Integer>() {
public Integer convertElement(SomeObject element) {
return element.getPropertyABCId();
}
}.convert(source);
基于策略的解决方案
使用这样的方法:
public <A, B> List<B> getProperties(
List<A> list,
GetPropertyStrategy<? super A, ? extends B> strategy
) {
List<B> result = new ArrayList<B>();
for( A a : list ) {
result.add(strategy.getProperty(a));
}
return result;
}
带有策略界面:
public interface GetPropertyStrategy<A, B>
{
public B getProperty(A toConvert);
}
然后像这样调用方法:
List<Integer> result = getProperties(source, new GetPropertyStrategy<SomeObject, Integer>() {
public Integer getProperty(SomeObject element) {
return element.getPropertyABCId();
}
});