Ako nájsť všetkých vracajúcich sa null

1. Prehľad

V tomto rýchlom článku použijeme rozhranie Java 8 Stream API a rozhranie Introspektor trieda - vyvolanie všetkých kariéristov nájdených v POJO.

Vytvoríme prúd getrov, skontrolujeme návratové hodnoty a zistíme, či je hodnota poľa nulový.

2. Inštalácia

Jediné nastavenie, ktoré potrebujeme, je vytvorenie jednoduchej triedy POJO:

public class Customer {private Integer id; súkromné ​​meno reťazca; private String emailId; súkromné ​​dlhé telefónne číslo; // štandardné getre a setre}

3. Vyvolanie Getterových metód

Budeme analyzovať Zákazník trieda pomocou Introspektor; poskytuje jednoduchý spôsob zisťovania vlastností, udalostí a metód podporovaných cieľovou triedou.

Najprv zhromaždíme všetko PropertyDescriptor prípady nášho Zákazník trieda. PropertyDescriptor zachytáva všetky informácie o vlastnosti Java Bean:

PropertyDescriptor [] propDescArr = Introspector .getBeanInfo (Customer.class, Object.class) .getPropertyDescriptors (); 

Poďme teraz po všetkom PropertyDescriptor inštancie a vyvolajte metódu čítania pre každú vlastnosť:

return Arrays.stream (propDescArr) .filter (nulls (customer)) .map (PropertyDescriptor :: getName) .collect (Collectors.toList ()); 

The nuly predikát, ktorý použijeme vyššie, skontroluje, či je možné vlastnosť prečítať, vyvolá getter a filtruje iba nulové hodnoty:

private static Predicate nulls (Customer customer) {return = pd -> {Method getterMethod = pd.getReadMethod (); boolovsky vysledok = nepravda; návrat (getterMethod! = null && getterMethod.invoke (zákazník) == null); }; } 

Nakoniec vytvorme inštanciu a Zákazník, nastavte niekoľko vlastností na nulu a otestujte našu implementáciu:

@Test public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult () {Customer customer = new Customer (1, "John", null, null); Výsledok zoznamu = Utils.getNullPropertiesList (zákazník); Zoznam expectFieldNames = Polia .asList ("emailId", "phoneNumber"); assertTrue (result.size () == expectFieldNames.size ()); assertTrue (result.containsAll (expectFieldNames)); }

4. Záver

V tomto krátkom tutoriáli sme dobre využili rozhranie Java 8 Stream API a Introspektor inštancia - vyvolanie všetkých getrov a získanie zoznamu nulových vlastností.

Ako obvykle je kód k dispozícii na GitHub.