我有一个可变大小的多维ArrayList(在示例中我将假设它包含3个ArrayLists)。 这些ArrayLists包含Team对象,如下所示:Remco&里斯。 我只允许组合一次,所以Joris& Remco也算作副本。
我知道如何查看2个arraylists是否包含相同的值,但我将如何在可变大小的多维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)
这是一种方法
//假设ArrayList<ArrayList<String>> multiDimenArr
有值,HashTable
用于检查值/项的出现次数
1)2嵌套for循环以遍历multiDimenArr
。
2)针对multiDimenArr
中的每个值...检查Hashtable
是否已经有contains(Object value)
3)如果它已经存在//做你想做的事情
4)否则将value
放入Hashtable
答案 1 :(得分: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<>()
将强制执行独特成员的独特团队。
答案 2 :(得分:0)
让我重申一下你的问题&#39;如何测试两个列表列表是否根据自定义的相等定义相交?如果我误解了,请在评论中纠正我。
在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());
}
首先将团队创建为成员列表并使您的结构列出成员列表列表,效率会更高。