【问题标题】:Customer Convertor for java.util.list to arrayjava.util.list 到数组的客户转换器
【发布时间】:2013-01-08 06:29:09
【问题描述】:

我有一个对象类型的列表,比如客户类(属性:customerId,customerName)和一个字符串数组。

有没有办法用列表中的所有 customerName 填充/获取数组? (除了手动遍历列表)

Customer c1 = new Customer(1,"ABC");
Customer c2 = new Customer(2,"DEF");
Customer c3 = new Customer(3,"XYZ");
List<Customer> list = new ArrayList<Customer>();
list.put(c1); list.put(c2); list.put(c3);

String[] allCustomerNames = new String[list.size()];
//Code to get allCustomerNames populated.
//Ofcourse, other than to iterate through list 

有什么方法可以类似于...

allCustomerNames = list.toArray(customerNameConvertor);

customerNameConveror 是假设的转换器类,它将告诉使用 customerName 填充数组元素。

【问题讨论】:

  • 您可以使用JOSQL查询您的List。
  • 没有迭代就无法获取名称,但您可以同时将您的名称添加到另一个列表,然后将其转换为数组...

标签: java arrays list


【解决方案1】:

您可以使用第三方库,例如 GuavaF4J

这就是它在 Guava 中的样子:

Function<Customer, String> customerToName = new Function<Customer, String>() {
        public String apply(Customer c) {
            return c.getName();
       };

List<String> allCustomerNamesList = Lists.transform(list, customerToName);

如果你需要一个数组,你必须使用普通的 toArray 方法:allCustomerNames = allCustomerNamesList.toArray(allCustomerNames);

【讨论】:

  • +1, 一个小注意,这仍然在内部迭代列表 - 然而,迭代位在库中完成,客户端只需要知道好的功能位。
【解决方案2】:

您可以像这样编写实用程序类。您可以获取所有字段的值数组。

public class FieldToArrayConvertor {
    public static Object[] getFieldValuesFromEntityList(List list, String fieldName) throws Exception {
        Object[] array = new Object[list.size()];
        int i=0;
        for(Object o : list) {
            Class<? extends Object> aClass = o.getClass();
            Field field = aClass.getDeclaredField(fieldName);
            Object invoke = field.get(o);
            array[i]= invoke;
            i++;
        }
        return array;
    }
    public static void main(String[] args)  {
        try {
            Employee em = new Employee("emp1");
            Employee em1 = new Employee("emp2");
            List<Employee> list1= new ArrayList() ;
            list1.add(em);
            list1.add(em1);
            Object[] field = getFieldValuesFromEntityList(list1, "name");
            for(Object o: field) {
                System.out.println(o);
            }
        } catch (Exception ex) {
            Logger.getLogger(FieldToArrayConvertor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

另请参阅: Uses of Reflection

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2011-02-22
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多