私は似ているが少し異なる場合がありFunction<A,B>
とFunction<B,C>
グァバ関数合成
の構図である、Function<A,C>
を作成するためのユーティリティがあることを見ました。
私の最初の機能は、BO
クラスのキーに基づいて列挙型を返すvalueOfFunction
です。
secind関数は、BO
オブジェクトであるEnumのメソッドを呼び出します。
だから、それは正確にA->B->C
ではありませんここでは、関数の:
private final static class RequestConvertor implements Function<CoreData, List<Request>> {
private final static Function<String,RequestConvertorEnum> typeConvertor = valueOfFunction(RequestConvertorEnum.class);
@Override
public List<Request> apply(CoreData coreData) {
RequestConvertorEnum requestConvertorEnum = typeConvertor.apply(coreData.getType());
return requestConvertorEnum.convertToRequests(coreData);
}
}
はここで列挙の方法です:
private final List<Request> convertToRequests(CoreData coreData) {
List<PropertyWrapper> properties = getProperties(coreData);
if (properties.size() == 0) {
return Collections.emptyList();
}
Request request = new Request(coreData.getKey(), properties, new RequestMetaData(
coreData.getFoo()));
return newArrayList(request);
}
は、これらの二つの機能を一緒に合成するよりよい方法はありますか?あなたはすぐにapply
メソッドを呼び出す別の関数(それはprivate static
メンバーだ)でのみを使用している -
ありがとうございました。私はEnumに変換する可能性のある例外を認識しています。文字列としての型は、DBを作成するときに持っているものであり、必要なときだけEnumに渡して変換する方が好きです。コレクションについてのご意見ありがとうございます。私は不変のリストを使うことができると思います。 –
String - > Enum定数は、両方のバージョンで 'RequestConvertor'のapplyメソッドで必要なときにのみ行います。あなたは' valueOfFunction.apply'メソッドを呼び出すでしょう。そして、私は 'Enum.valueOf'静的メソッドを代わりに呼び出すでしょう。 。 – Xaerxess