オブジェクトにnull以外のフィールドをカウントユーザー。また、私が計算のパーセンテージで考慮したくないフィールドは、userId
,loginId
、displayName
のようにいくつかあります。私は、ユーザーのデータが含まれている<code>UserProfile</code>クラスを持っている
簡単な方法は、null以外のフィールドcount
を取得するために、複数のIf
ステートメントを使用することですが、それはボイラープレートコードの多くを伴うだろうし、私も完了した割合を表示する必要のある別のクラスOrganization
があります。だから私は、以下のショーとしての効用関数を作成:
public static <T, U> int getNotNullFieldCount(T t,
List<Function<? super T, ? extends U>> functionList) {
int count = 0;
for (Function<? super T, ? extends U> function : functionList) {
count += Optional.of(t).map(obj -> function.apply(t) != null ? 1 : 0).get();
}
return count;
}
そして、下図のように、私はこの関数を呼び出します。
List<Function<? super UserProfile, ? extends Object>> functionList = new ArrayList<>();
functionList.add(UserProfile::getAge);
functionList.add(UserProfile::getAddress);
functionList.add(UserProfile::getEmail);
functionList.add(UserProfile::getContactNumber);
System.out.println(getNotNullFieldCount(userProfile, functionList));
私の質問は、これは私がいないnull
フィールドを数えることができる最善の方法ですか私はそれをさらに改善することができた。提案してください。
この質問はおそらくCodeReviewの方が適していると思います。しかし、あなたのソリューションは悪く見えません。 – Seth
http://stackoverflow.com/questions/17095628/loop-over-all-fields-in-a-java-class – lexicalscope
リストに関数を追加するので、フィールドを1つチェックする簡単なメソッドを作成するよりも優れていません – AdamSkywalker