Ho una classe UserProfile
contenente dati dell'utente come mostrato di seguito:conte campi non nulli in un oggetto
class UserProfile {
private String userId;
private String displayName;
private String loginId;
private String role;
private String orgId;
private String email;
private String contactNumber;
private Integer age;
private String address;
// few more fields ...
// getter and setter
}
devo contare non null
campi per mostrare quanto percentuale del profilo è stato riempito dal utente. Inoltre ci sono pochi campi che non voglio considerare in calcolo percentuale come: userId
, loginId
e displayName
.
modo semplice sarebbe quella di utilizzare più If
dichiarazioni per ottenere il campo non nullo count
ma comporterebbe sacco di codice piastra di caldaia e v'è un'altra classe Organization
per cui ho bisogno di mostrare percentuale di completamento pure. Così ho creato una funzione di utilità come mostrato di seguito:
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;
}
E poi io chiamo questa funzione come illustrato di seguito:
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));
La mia domanda è, è questo il modo migliore che potevo contare non null
campi o Potrei migliorare ulteriormente. Si prega di suggerire.
Questa domanda sarebbe probabilmente più adatta per CodeReview, penso. Ma la tua soluzione non sembra male tbh. – Seth
http://stackoverflow.com/questions/17095628/loop-over-all-fields-in-a-java-class – lexicalscope
Poiché si aggiungono le funzioni all'elenco, non è meglio che creare un metodo semplice in cui si controllano i campi uno di uno – AdamSkywalker