如何将自定义对象(类位)的Arraylist复制到自定义对象(类优惠券)的Arraylist中

时间:2017-01-11 06:21:38

标签: android arraylist

i)Class Place(有3个字符串变量)ii)Class Coupon(有4个字符串变量 - 3个与Class Place相同,另外还有一个String Variable)。现在我有类Place的对象的ArrayList需要被复制到Class Coupon对象的ArrayList。因此,对象类优惠券的Arraylist的3个变量基本上与Class Place的对象的ArrayList相同,然后第四个变量将用另一个字符串初始化。我怎么能做到这一点。 而如何将反之亦然,如将类Coupon对象的ArrayList的3个变量复制到Class Place对象的ArrayList中。请帮助。

1. Class Place:
public class Place implements Serializable{
    public String mPlace;
    public String mOffer;
    public String mImage;


    public Place(String place, String offer, String image) {
        this.mPlace = place;
        this.mOffer = offer;
        this.mImage = image;
    }
}

2. Class Coupon:
public class Coupon implements Serializable {
    public String mPlace;
    public String mOffer;
    public String mImage;
    public String mItemClicked;

    public Coupon(String place, String offer, String image, String ItemClicked) {
        this.mPlace = place;
        this.mOffer = offer;
        this.mImage = image;
        this.mItemClicked = ItemClicked;
    }


}
3. I have now two variables List<Place>mPlaces and List<Coupon>mCoupons.
If one of variable has complete data then how I can copy it into another.

2 个答案:

答案 0 :(得分:0)

您可以使用theese方法进行转换。

public static ArrayList<Coupon> toCoupons(ArrayList<Place> places){
    ArrayList<Coupon> coupons = new ArrayList<>();
    for (Place place: places) {
        Coupon coupon = new Coupon;
        coupon.mOffer = place.mOffer;
        ....

        coupons.add(coupon);
    }

    return coupons;
}


public static ArrayList<Places> toPlaces(ArrayList<Coupons> coupons){
    ArrayList<Coupon> places = new ArrayList<>();
    for (Coupon coupon: coupons) {
        Place place = new Place();
        place.mOffer = coupon.mOffer;
        ....

        places.add(place);
    }

    return places;
}

我强烈建议创建一个具有在这些类之间共享的字段的基类。其他类扩展了它。然后你可以使用多态。它将使您的世界更容易运行。

祝你好运。

答案 1 :(得分:0)

由于Place.class的{​​{1}}成员与Coupon.class中的成员相同,您可以从Coupon.class中删除这3个成员,只需Place.class这样的成员:

public class Coupon extends Place implements Serializable {

    public String mItemClicked;

    public Coupon(String place, String offer, String image, String ItemClicked) {
        this.mPlace = place;
        this.mOffer = offer;
        this.mImage = image;
        this.mItemClicked = ItemClicked;
    }
}

然后假设您有ArrayList<Coupon> list = new ArrayList<>();,那么您可以轻松创建Place.class列表,如:

ArrayList<Place> placeList = new ArrayList<>();
for(Coupon coupon : couponList) {
    placeList.add(coupon);
}

所以你可以很容易地将优惠券课程安排到课堂上。

编辑:
您必须为所有Coupon对象创建新的Place对象,原因是当您创建Coupon对象时,它具有Place实例,因为它扩展了Place所以您可以直接将Coupon投射到Place,但是您无法直接投射副Versa。因此,您需要为每个Coupon对象创建新的Place对象并设置该值。喜欢:

ArrayList<Coupon> couponList = new ArrayList<>();
for(Place place : placeList) {
    Coupon coupon = new Coupon(place.mPlace, place.mOffer, place.mImage, null);
    couponList.add(coupon);
}

注意:如果您拥有的ArrayList<Place>是通过投射Coupon对象创建的,那么您可以直接将Place对象转换为Coupon个对象所以在这种情况下,不需要为所有Coupon对象创建新的Place对象。