2

Customer クラス (属性: 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 を使用するよう指示する架空のコンバーター クラスです。

4

2 に答える 2

5

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);

于 2013-01-08T06:35:41.543 に答える
1

このようなユーティリティ クラスを記述できます。すべてのフィールドの値の配列を取得できます。

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);
        }
    }
}

関連項目: リフレクションの使用

于 2013-01-08T06:50:31.023 に答える