天天看點

fastreport 列印兩個list_Java中找出List集合中屬性名為key屬性值為value的對象

fastreport 列印兩個list_Java中找出List集合中屬性名為key屬性值為value的對象
前言:在日常開發中,我們需要從一個 List 集合中找出其中某一個對象,下面就介紹如何從 List 集合中找出屬性名為 key 屬性值為 value 的對象

1、方法 getObjectByKeyAndValue

/**
 * 在一個實體list中,找出屬性是key,值為value的實體
 *
 * @param list
 * @param key
 * @param value
 * @param <T>
 * @return
 */
private static <T> T getObjectByKeyAndValue(List<T> list, String key, String value) {
    if (null == list || list.isEmpty() || StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {
        return null;
    }
    for (T item : list) {
        try {
        	// 擷取目前類
            Class cls = item.getClass();
            // 獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段
            Field[] fields = cls.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field f = fields[i];
                // 當未設定Field的setAccessible方法為true時,會在調用的時候進行通路安全檢查,會抛出IllegalAccessException異常
                f.setAccessible(true);
                // 擷取字段的名稱
                String name = f.getName();
                // 如果key相等
                if (key.equals(name)) {
                    // 如果值相等
                    if (f.get(item).equals(value)) {
                        // 傳回對應的類,結束循環
                        return item;
                    }
                    // 否則直接結束目前循環
                    else {
                        break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return null;
}
1234567891011121314151617181920212223242526272829303132333435363738394041424344
           
  • getClass(),我們通過反射,擷取目前類
  • getDeclaredFields,擷取目前類所有聲明字段
  • setAccessible(true),這一步是有必要的,會在調用的時候進行通路安全檢查,會抛出IllegalAccessException異常
  • getName(),擷取字段名,跟我們傳入的 key 進行比較
  • 再擷取屬性值跟我們傳入的 value 進行比較

2、測試

public static void main(String[] args) {
    List<User> list = new ArrayList<>();
    User user = new User(2, "rose", 18);
    User user1 = new User(1, "jack", 20);
    list.add(user);
    list.add(user1);
    System.out.println(getObjectByKeyAndValue(list, "name", "jack"));
}
12345678
           

我們在 List 集合中傳入了兩個對象,然後我們需要找出 name 為 jack 的對象

列印結果

fastreport 列印兩個list_Java中找出List集合中屬性名為key屬性值為value的對象

這樣,我們就找出了 name 為 jack 的對象

如您在閱讀中發現不足,歡迎留言!!!