java中使用反射机制获取实体类集合的某个属性值

需求

今天遇到一个需求。需要从几个对象的集合中取出对象的某些属性。怎么办呢?哪就利用反射机制写个方法吧。

思路

入参

首先是几个对象的集合,那么方法的入参就是 list<?> 因为是不同对象所以还是得用泛型。用反射当然得有 参数Class<?> 最后还得有第三个参数就是需要获取的属性名。

出参

出参比较容易,就搞个String好了

实现

public static String getStringAbel(List<?> o, Class<?> c, String field) {
        StringBuffer result = new StringBuffer();
        if (StringUtils.isNoneBlank(field)) {
            Field[] fields = c.getDeclaredFields();
            int pos;
            for (pos = 0; pos < fields.length; pos++) {
                if (field.equals(fields[pos].getName())) {
                    break;
                }
            }
            for (Object o1 : o) {
                try {
                    fields[pos].setAccessible(true);
                    result.append(fields[pos].get(o1) + ",");
                } catch (Exception e) {
                    System.out.println("error--------" + "Reason is:" + e.getMessage());
                }
            }
        }
        return result.deleteCharAt(result.length() - 1).toString();
    }
//调用
  public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        Person person = new Person();
        person.setName("abel");
        person.setAge(16);

        Person person2 = new Person();
        person2.setName("abel2");
        person2.setAge(17);

        personList.add(person);
        personList.add(person2);

        System.out.println(getStringAbel(personList, Person.class, "name"));
    }

关于实现中的for 循环为什么不用 java8的 stream 呢?因为stream 就循环来说 和for 的效率大致差不多。反而 for 会使逻辑更清晰一点。stream 的优势在于对数据的分组,过滤,等方面。

具体观点请看:http://soujava.com/java8%E4%B8%AD%E4%BD%BF%E7%94%A8stream%E6%B5%81%E5%92%8Cfor%E5%BE%AA%E7%8E%AF%E5%88%86%E5%88%AB%E5%AF%B9%E6%95%B0%E6%8D%AE%E9%9B%86%E5%90%88%E9%81%8D%E5%8E%86%E7%9A%84%E5%B7%AE%E5%BC%82/

本文参考:http://blog.csdn.net/xiaoxian8023/article/details/24109185?utm_source=tuicool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值