我有以下代码。在第一个我尝试在列表中设置名为'不可用'的值。 接下来,在每个我必须在列表domainStr上产生一个循环减去不可用。我该怎么办?
public Result execute(List<String> domainsStr) {
Result result = new Result();
try {
List<String> domains = domainService.findByNames(domainsStr);
result.setUnavailable(domains);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
for (String domain : domainsStr) {
......
}
return result;
}
public static class Result {
private List<String> unavailable = new ArrayList<>();
public List<String> getUnavailable() {
return unavailable;
}
public void setUnavailable(List<String> unavailable) {
this.unavailable = unavailable;
}
}
答案 0 :(得分:7)
removeAll(Collection c)是对您最有帮助的功能。话虽如此,只有在为Domain
对象正确定义了equals方法的情况下,这才能正常工作。在这种情况下它是String
因此无关紧要。但是,只是为了记住它。
所以请说,domainsStr.removeAll(result.getUnavailable());
另外,如果Result类是静态的,为什么在这里创建新对象?
Result result = new Result();
这result.setUnavailable(domains);
可以改为
Result.setUnavailable(domains);
答案 1 :(得分:1)
我必须在列表domainStr上生成一个循环减去不可用。
如果我理解正确,我认为您正在寻找removeAll
方法:
从此列表中删除其中包含的所有元素 指定集合(可选操作)。
domainsStr.removeAll(result.getUnavailable());
for (String domain : domainsStr) {
}
如果您想让domainsStr
保持不变,您可以创建一个临时列表并在其上执行这些操作。
答案 2 :(得分:1)
List<String> tempList = new ArrayList<String>(domainsStr);
tempList.removeAll(result.getUnavailable());
for(String domain : tempList){
.....
我将它们放入诱惑列表中,这样您就不会丢失domainsStr列表中的项目。