2015-01-14 81 views
0

我有一個可變大小的多維ArrayList(在本例中我假設它包含3個ArrayLists)。 這些ArrayLists包含看起來像這樣的Team對象:Remco & Joris。 我只允許組合一次,所以約里斯& Remco也會算作重複。檢查多維ArrayList是否具有多次值

我知道如何查看2個arraylist是否包含相同的值,但我將如何去做一個可變大小的多維數組列表?

舉個例子,我的ArrayList看起來像這樣:

[ 
[Hidde & Lege plaats, Hans & Sven, Martijn & Simon, Remco & Joris, Daniël & Wouter, Jelle & Aziz, Dylan & Jasper, Mart & Ramon, Tim & Job, Jan & Brian, Thomas & Robin, Kevin & a, Zeger & Chariss, Wilfred & Bart], 
[Hidde & Bart, Hans & Lege plaats, Martijn & Sven, Remco & Simon, Daniël & Joris, Jelle & Wouter, Dylan & Aziz, Mart & Jasper, Tim & Ramon, Jan & Job, Thomas & Brian, Kevin & Robin, Zeger & a, Wilfred & Chariss], 
[Hidde & Chariss, Hans & Bart, Martijn & Lege plaats, Remco & Sven, Daniël & Simon, Jelle & Joris, Dylan & Wouter, Mart & Aziz, Tim & Jasper, Jan & Ramon, Thomas & Job, Kevin & Brian, Zeger & Robin, Wilfred & a] 
] 

我把一些換行,使它看起來更好。在該計劃中,它只是一個單一的行。

+0

哪裏是彼得? –

+0

實際上並不存在。名稱可以在文件中更改,但我將編輯我的問題以使用名稱,如示例中的名稱。 – user1433479

+0

我認爲唯一的選擇是檢查每個值,如果整個數組中有另一個值。既然他們都應該是不同的,你不能避免單獨看每一個。 – user3079666

回答

0

下面是一個方法來做到這

//假設ArrayList<ArrayList<String>> multiDimenArr具有值,並且HashTable用於檢查的值/項目的發生

1)2嵌套for循環遍歷multiDimenArr

2)在multiDimenArr每個值...檢查是否Hashtable已經有它的是contains(Object value)

3),如果它已經存在//做你想做什麼都

4)其他放valueHashtable

0

我會假設你的數據結構是這樣的:

ArrayList<ArrayList<String>> matrix = new ArrayList<>() 

雖然您的團隊對象似乎很好定義,並且會受益於而不是是一個字符串......所以當您解析它們時,將它們解析爲真正的對象。

public class Team { 
    Set<String> teamMembers = new HashSet() 

    public boolean equals(Object o ) { 
    return (o instanceof Team && Team.class.cast(o).teamMembers.equals(this.teamMembers)) 
    } 
} 

然後,不管你是如何讓你的團隊成員組成的,由相同成員組成的團隊匹配如此。

注意:爲了簡明起見,我將離開很多

或者,你真的可以簡化您的基礎數據結構只是

Set<Set<String>> matrixOfUniqueCells = new HashSet<>() 

這將強制執行的唯一成員的唯一球隊。

0

讓我重申你的問題:'如果測試兩個列表是否按照相等的自定義定義相交'。如果我誤解了,請在評論中糾正我。

一個巧妙的辦法在Java中8要做到這一點是通過flatMap流和使用拉平兩個:

boolean hasCommonItem(List<List<String>> list1, List<List<String>> list2) { 
    return list1.stream().flatMap(List::stream) 
     .anyMatch(team1 -> list2.stream().flatMap(List::stream) 
      .anyMatch(team2 -> teamEquals(team1, team2))); 
} 

那麼您需要實現一個teamEquals方法,該字符串團隊進行比較。你的情況可能是這樣的:

private boolean teamEquals(Stream team1, String team2) { 
    return members(team1).equals(members(team2)); 
} 

private List<String> members(String team) { 
    return Arrays.stream(team.split("&")) 
     .map(String::trim) 
     .sorted() 
     .collect(Collectors.toList()); 
} 

這會是很多更有效的創建團隊爲成員第一的名單,讓你的結構成員名單列表的列表。