2017-05-30 55 views
0

考慮一個POJO具有n個屬性。如何獲得表示POJO的填充屬性(分配值/非空值)數量的百分比值?
POJO是MySql數據庫中的一個實體,我使用Java,Hibernate和Spring。計算表示填充的屬性數量的Java對象的百分比

+0

要進行這樣的計算在哪裏?在數據庫本身?如果你想用Java來理解你的POJO領域,那麼應該明白怎麼做。 –

+1

你需要爲一個班級做這個嗎?如果是這樣,最簡單的方法是隻寫一個方法,依次檢查每個屬性。如果你需要檢查多個類,那麼也許考慮使用反射。 – Sam

+1

請添加你已經完成/嘗試到目前爲止,所以我們可以幫助你,代碼示例在這裏非常有幫助。但我相信你可以使用反射 - 雖然它可能不是最好的方式,但我不知道它是否可用,因爲我自己還沒有使用反射。然而,這可能值得調查。 – DCON

回答

2

嘿,你可以這樣做:

public class CountReflection { 

    public static void main(final String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { 

     PoJo p = new PoJo(); 
     p.setA("a"); 

     Field[] fields = p.getClass().getDeclaredFields(); 

     int amountOfFields = 0; 
     int amountOfFieldsNotNull = 0; 

     for (Field field : fields) { 
      amountOfFields++; 
      Field declaredField = p.getClass().getDeclaredField(field.getName()); 
      declaredField.setAccessible(true); 
      Object value = declaredField.get(p); 
      if (value != null) { 
       amountOfFieldsNotNull++; 
      } 
     } 
     System.out.println("amountOfFields " + amountOfFields); 
     System.out.println("amountOfFieldsNotNull " + amountOfFieldsNotNull); 
     float percent = (amountOfFieldsNotNull * 100.0f)/amountOfFields; 
     System.out.println("percent of not null " + percent); 
    } 

} 

隨着POJO:

public class PoJo { 

    private String a; 
    private String b; 
    private String c; 
    private String d; 
    private String e; 

    public String getA() { 
     return a; 
    } 

    public void setA(final String a) { 
     this.a = a; 
    } 

    public String getB() { 
     return b; 
    } 

    public void setB(final String b) { 
     this.b = b; 
    } 

    public String getC() { 
     return c; 
    } 

    public void setC(final String c) { 
     this.c = c; 
    } 

    public String getD() { 
     return d; 
    } 

    public void setD(final String d) { 
     this.d = d; 
    } 

    public String getE() { 
     return e; 
    } 

    public void setE(final String e) { 
     this.e = e; 
    } 

} 
+0

謝謝。它適合我。 –

+0

欣賞投票並接受答案。 – kism3t