テンプレートベースのソリューション
次のようなテンプレートを定義します。
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();
}
});