【发布时间】:2021-11-13 23:05:12
【问题描述】:
我正在尝试比较两个 ArrayList(即 ArrayList、list1 和 ArrayList)testQueryValue 并返回它们之间的共同元素。以下是我尝试过的
private List<Loading> matchLists(List<Loading> list1 ,List<Test> list2) {
List<Loading> matchCriteria = new ArrayList<Loading>(list1);
List<String>testQueryValue= list2.get(0).getTestQueryValues();
for(Loading match: list1) {
for(Sring test: testQueryValue){
if (matchCriteria.contains(test)) {
matchCriteria.add(test); // Error: The method add(Loading) in the type List<Loading> is not applicable for the arguments (String)
}
}
return matchCriteria;
}
如上编辑此代码后,得到代码中注释行中的错误。
我知道这个问题已经被问过好几次了。根据答案,我尝试过这种方法并且无法返回匹配项。 我正在遍历 list1 的每个元素,它是一个加载列表,它包含嵌套数组,并检查是否有任何元素包含测试(testQueryValue 的子集)?然后添加 test 作为方法返回的 matchCriteria 的最后一个元素。
提前感谢您的帮助
【问题讨论】:
-
“matchCriteria 正在返回 null。” - 我没有看到任何名为
matchCriteria的东西可以返回任何东西或者可能是null。你的意思是列表是空的? (由于您使用contains(match),它不应该直接包含null)。 -
另外,
MatchCriteria、getList2QueryValues()等似乎都不是 JDK 类,那么您使用的是什么库?您需要详细说明,添加一些示例输入和所需输出,最好提供minimal reproducible example。 -
@Thomas 我已经编辑了代码。这两个列表不是空的,我已经对其进行了调试,并且看到了值。抱歉,我将 MatchCriteria 引用变量进一步用于设置一些 lombok 值。我在编辑中删除了关于提供示例值的内容。我不应该分享,因为这是我的项目数据。
-
您的方法返回
List<String>或List<Loading>中的哪一个? -
好吧,你不能调用
matchCriteria.add(test);,但需要从test创建一个Loading实例(它的工作原理取决于我上面所说的相同的事情)。假设有一个Loading(String)构造函数和equals()和hashCode()的良好实现,你可以做类似Loading testLoading = new Loading(test); if( !matchCriteria.contains(testLoading) ) { matchCriteria.add(testLoading); }的事情——或者更好的是,使用Set(LinkedHashSet,如果你需要保持秩序),因为这会已经处理重复,所以不需要!contains()检查。
标签: java arrays arraylist collections