2013-10-11 3 views
2

Я знаю, что BeanUtils может копировать один объект в другой.BeanUtils copyProperties для копирования Arraylist

Возможно ли скопировать архиватора.

Например:

FromBean fromBean = new FromBean("fromBean", "fromBeanAProp", "fromBeanBProp"); 
ToBean toBean = new ToBean("toBean", "toBeanBProp", "toBeanCProp"); 
BeanUtils.copyProperties(toBean, fromBean); 

Как этого добиться?

List<FromBean > fromBeanList = new ArrayList<FromBean >(); 
List<ToBean > toBeanList = new ArrayList<ToBean >(); 
BeanUtils.copyProperties(toBeanList , fromBeanList); 

Не работает для меня. Кто-нибудь может мне помочь, пожалуйста.

Заранее спасибо.

ответ

4

Если у вас есть два списка равных размера, то вы можете сделать следующее

for (int i = 0; i < fromBeanList.size(); i++) { 
    BeanUtils.copyProperties(toBeanList.get(i), fromBeanList.get(i)); 
} 
+0

Ya теперь я сделал это как это Но я хочу знать, чтобы скопировать полностью сразу спасибо –

0

BeanUtils.copyProperties, Он копирует только одноименную собственность. Итак, в случае с ArrayList вы не можете этого сделать.

Согласно документации:

Копирование значений свойств от происхождения бобов к фасоли назначения для всех случаях, когда имена свойств являются одинаковыми.

1

вы можете попробовать что-то вроде этого

for(int i=0; i<fromBeanList.size(); i++){ 
    BeanUtils.copyProperties(toBeanList.get(i) , fromBeanList.get(i)); 
} 

Надеется, что это помогает ..

Oops это уже объясняется кем-то сейчас.

в любом случае попробуйте.

3

Если у вас есть список координат с данными и списком назначения пустым, решение:

List<Object> listOrigin (with data) 
    List<Object> listDestination= new ArrayList<Object>(); 

    for (Object source: listOrigin) { 
     Object target= new Object(); 
     BeanUtils.copyProperties(source , target); 
     listDestination.add(target); 
    } 
+0

Это на самом деле правильная реализация, а не принятый ответ.! –

0

Что вы можете сделать, это написать свой собственный универсальный класс копирования.

class CopyVector<S, T> { 
    private Class<T> targetType; 
    CopyVector(Class<T> targetType) { 
     this.targetType = targetType; 
    } 
    Vector<T> copy(Vector<S> src) { 
     Vector<T> target = new Vector<T>(); 
     for (S s : src) { 
      T t = BeanUtils.instantiateClass(targetType); 
      BeanUtils.copyProperties(s, t); 
      target.add(t); 
     } 
     return target; 
    } 
} 

Еще одним шагом будет создание типа списка - это предполагает, что вы хотите скопировать векторы.

Смежные вопросы