Java 多次检查多维ArrayList是否具有值

Java 多次检查多维ArrayList是否具有值,java,arraylist,multidimensional-array,iteration,Java,Arraylist,Multidimensional Array,Iteration,我有一个大小可变的多维ArrayList(在本例中,我假设它包含3个ArrayList)。 这些ArrayList包含如下所示的团队对象:Remco&Joris。 我只允许有一次组合,所以Joris&Remco也可以算作重复 我知道如何查看两个arraylist是否包含相同的值,但如何在大小可变的多维arraylist中执行此操作 例如,我的arraylist如下所示: [ [Hidde & Lege plaats, Hans & Sven, Martijn & Simo

我有一个大小可变的多维ArrayList(在本例中,我假设它包含3个ArrayList)。 这些ArrayList包含如下所示的团队对象:Remco&Joris。 我只允许有一次组合,所以Joris&Remco也可以算作重复

我知道如何查看两个arraylist是否包含相同的值,但如何在大小可变的多维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]
]

我加了一些换行符使它看起来更好。在程序中只有一行。

这里有一种方法可以做到这一点

//假设
ArrayList multidimenar
具有值,并且
HashTable
用于检查值/项的出现情况

1) 2嵌套,用于循环遍历
多维体

2) 对于
MultiDimenar
中的每个值。。。检查
Hashtable
是否已通过is
包含(对象值)

3) 如果它已经存在//做任何你想做的事


4) 否则将
放入
哈希表

我假设您的数据结构如下:

ArrayList<ArrayList<String>> matrix = new ArrayList<>()
ArrayList矩阵=新的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 teamMembers=newhashset()
公共布尔等于(对象o){
return(o instanceof Team&&Team.class.cast(o.teamMembers.equals)(this.teamMembers))
}
} 
然后,不管你如何组建你的团队,由相同成员组成的团队都是真实的

注意:为了简洁起见,我留下了很多东西

或者,您可以真正简化您的基本数据结构,使其

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

这将强制执行由独特成员组成的独特团队。

让我重申您的问题,即“如何根据自定义的平等定义测试两个列表是否相交”。如果我误解了,请在评论中纠正我

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

首先将团队创建为成员列表,然后将您的结构创建为成员列表,这样效率会更高。

实际上并不存在。文件中的名称可以更改,但我将编辑我的问题以使用示例中的名称。我认为唯一可用的选项是,如果整个数组中有另一个值,则只检查每个值。因为它们都被认为是不同的,所以你不能避免分别看每一个。
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());
}