2014-08-28 242 views
0

我面對這個任務:合併不同對象的兩個數組到一個數組/集合

我有A類和B類這兩個類是不同的,但幾乎是相同的。 我需要以某種方式將它們合併到1個單個對象數組中,以便稍後可以在組合這兩個類的列表中使用它們。

類A:B

public class Followers { 
    private String request_id; 
    private String number_sender; 
    private String state; 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getNumber_sender() { 
     return number_sender; 
    } 

    public String getState() { 
     return state; 
    } 
} 

類:

public class Following { 
    private String name; 
    private String state; 
    private String request_id; 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getState() { 
     return state; 
    } 
} 

我試着這樣做下一步動作:

Object[] obj1 = (Object[]) followers; 
Object[] obj2 = (Object[]) followings; 

Object[] completeArray = ArrayUtils.addAll(obj1, obj2); 

凡的追隨者和下面是相應的兩個數組類。然後在我的名單適配器使用:

if (values[currentItem] instanceof Followers) { BLA BLA BLA} 

    else if (values[currentItem] instanceof Following) { BLA BLA BLA} 

但我得到這個異常:

造成的:java.lang.ArrayStoreException源[0]類型的json.objects.Following不能儲存在目標數組類型json.objects.Followers []

將兩個不同對象數組合併成一個數組的最佳方式是什麼?

只是在它們之間實現相同的接口來完成這項工作,然後它們將基本上處於接口類型的數組中?

你推薦什麼其他方式?

+2

「***只是在它們之間實現相同的接口來完成這項工作,然後它們將基本上處於接口類型的數組中嗎?***」如果您基本上做了這些工作,每種類型的物體都是一樣的。 – 2014-08-28 14:49:01

+0

是否有任何連接'追隨者[0]和追隨者[0]'我的意思是像'completeArray [0] = [追隨者[0],追隨[0]]'做的事情?如果是這樣,「追隨者[]」和「追隨[]」的長度是否相同? – qbit 2014-08-28 14:49:38

回答

3

嘗試此

Object[] completeArray = new Object[0]; 
completeArray = ArrayUtils.addAll(completeArray, obj1); 
completeArray = ArrayUtils.addAll(completeArray, obj2); 
+0

謝謝你解決了我目前實施的解決方案 – Yosi199 2014-08-28 15:34:19

0

USE的concat

變種合併= obj1.concat(OBJ2); //合併兩個陣列

+0

這不是Java。 Groovy的? – talex 2014-08-28 15:46:06

0

試試這個。

private Object[] appendObj(Object[] obj, Object newObj) { 

    ArrayList<Object> temp = new ArrayList<Object>(Arrays.asList(obj)); 
    temp.add(newObj); 
    return temp.toArray(); 

    } 
3

如果你把兩個類實現一個共同的interface你可以操縱他們的陣列/列表,就好像它們包含接口的實例。

public interface Follow { 

    public String getRequest_id(); 

    public String getState(); 
} 

public class Follower implements Follow { 

    private String request_id; 
    private String number_sender; 
    private String state; 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getNumber_sender() { 
     return number_sender; 
    } 

    public String getState() { 
     return state; 
    } 
} 

public class Following implements Follow { 

    private String name; 
    private String state; 
    private String request_id; 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getState() { 
     return state; 
    } 
} 

public void test() { 
    List<Follow> all = new ArrayList<>(); 

    all.add(new Following()); 
    all.add(new Follower()); 

    for (Follow f : all) { 
     String id = f.getRequest_id(); 
     String state = f.getState(); 
    } 

} 

或者你可以把它們放在一個層次:

public class Entity { 
    private String request_id; 
    private String state; 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getState() { 
     return state; 
    } 
} 

public class Follower extends Entity { 

    private String number_sender; 

    public String getNumber_sender() { 
     return number_sender; 
    } 

} 

public class Following extends Entity { 

    private String name; 

    public String getName() { 
     return name; 
    } 

} 

public void test() { 
    List<Entity> all = new ArrayList<>(); 

    all.add(new Following()); 
    all.add(new Follower()); 

    for (Entity f : all) { 
     String id = f.getRequest_id(); 
     String state = f.getState(); 
    } 

} 

或者你可以使額外的字段爲屬性。

enum Attribute { 

    Follows, 
    Followed; 
} 

public static class Entity { 

    private String request_id; 
    private String state; 
    EnumMap<Attribute, String> attributes = new EnumMap<>(Attribute.class); 

    public String getRequest_id() { 
     return request_id; 
    } 

    public String getState() { 
     return state; 
    } 

    // Factory to make entities. 
    static Entity make(Attribute attribute, String value) { 
     Entity e = new Entity(); 
     e.attributes.put(attribute, value); 
     return e; 
    } 
} 

public void test() { 
    List<Entity> all = new ArrayList<>(); 

    all.add(Entity.make(Attribute.Follows, "Fred")); 
    all.add(Entity.make(Attribute.Followed, "Gill")); 

    for (Entity f : all) { 
     String id = f.getRequest_id(); 
     String state = f.getState(); 
    } 

} 

有無限的可能性。