У меня есть следующий код. Сначала я попытался установить значения в списке под названием «недоступен». Далее, для каждого я должен произвести цикл по списку 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;
    }

}
4
user3127896 17 Янв 2014 в 15:52

3 ответа

Лучший ответ

Я должен произвести цикл в списке domainStr минус недоступен.

Если я правильно понял, думаю, вы ищете removeAll метод:

Удаляет из этого списка все его элементы, содержащиеся в указанной коллекции (необязательная операция).

domainsStr.removeAll(result.getUnavailable());
for (String domain : domainsStr) {

}

Если вы хотите оставить domainsStr без изменений, вы можете создать временный список и выполнять над ним эти операции.

1
user2336315 17 Янв 2014 в 11:54
List<String> tempList = new ArrayList<String>(domainsStr);
tempList.removeAll(result.getUnavailable());
for(String domain : tempList){ 
    .....

Я поместил их в список искушений, чтобы вы не потеряли элементы в списке domainsStr.

1
Dan Temple 17 Янв 2014 в 12:01

removeAll (Коллекция c) - это функция, которая будет для вас наиболее полезной. Сказав это, это будет работать правильно, только если у вас есть метод equals, правильно определенный для вашего объекта Domain. В данном случае это String, поэтому это не имеет значения. Но просто чтобы иметь это в виду.

Так что просто скажи domainsStr.removeAll(result.getUnavailable());

Кроме того, если класс Result является статическим, зачем здесь создание нового объекта?

Result result = new Result();

Это result.setUnavailable(domains); можно изменить на Result.setUnavailable(domains);

7
Hrishikesh 17 Янв 2014 в 11:58