List <string> minus List <string> </string> </string>

时间:2014-01-17 11:52:07

标签: java list

我有以下代码。在第一个我尝试在列表中设置名为'不可用'的值。 接下来,在每个我必须在列表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;
    }

}

3 个答案:

答案 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列表中的项目。