我需要检查 ArrayList 中的所有字符串是否都存在于另一个 ArrayList 中。我可以使用 containsAll 但这不是我想要实现的目标。让我通过示例向您展示这一点:
assertThat(firstArray).containsAll(secondArray);
此代码将检查一个数组中的所有项目是否都在另一个数组中。但我需要检查一个数组中的每个项目是否包含在第二个数组中的任何位置。
List<String> firstArray = new ArrayList<>;
List<String> secondArray = new ArrayList<>;
firstArray.add("Bari 1908")
firstArray.add("Sheffield United")
firstArray.add("Crystal Palace")
secondArray.add("Bari")
secondArray.add("Sheffield U")
secondArray.add("C Palace")
所以我想检查 secondaryArray 中的第一项是否位于 firstArray(true)
中,而不是 second(true)
和 third(false)
>。我编写了完成这项工作的代码,但它非常复杂,我想知道是否有更简单的方法来实现这个目标(也许使用 hamcrest 匹配器或类似的东西)
ArrayList<String> notMatchedTeam = new ArrayList<>();
for (int i = 0; i < secondArray.size(); i++) {
String team = secondArray.get(i);
boolean teamMatched = false;
for (int j = 0; j < firstArray.size(); j++) {
teamMatched = firstArray.get(j).contains(team);
if (teamMatched) {
break;
}
}
if (!teamMatched) {
notMatchedTeam.add(team);
}
}
最佳答案
你可以做这样的事情
List<String> firstArray = new ArrayList<>();
List<String> secondArray = new ArrayList<>();
firstArray.add("Bari 1908");
firstArray.add("Sheffield United");
firstArray.add("Crystal Palace");
secondArray.add("Bari");
secondArray.add("Sheffield U");
secondArray.add("C Palace");
Set<String> firstSet= firstArray
.stream()
.collect(Collectors.toSet());
long count= secondArray.stream().filter(x->firstSet.contains(x)).count();
///
Map<String, Boolean> result =
secondArray.stream().collect(Collectors.toMap(s->s, firstSet::contains));
如果 count >0,则第二个数组中有一些项目在第一个数组中不存在。
结果包含字符串及其状态。
谢谢
关于java - 检查 ArrayList 是否包含另一个 ArrayList 中的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43389460/