2016-03-21 3 views
-1

В моем проекте есть необходимость в 2 методах: один для добавления версии для объекта, другой для его удаления. Логика для этих двух методов почти одинакова: проверьте условия, и если все в порядке, добавьте/удалите версию для выпуска версии Collection. У меня есть некоторые проблемы с использованием Collectiion::add и Collection::remove, поэтому я создал 2 статических метода removeVersion и addVersion. Как я могу обновить этот метод, поэтому не было бы необходимости в FixVersionServiceImpl::addVersion и FixVersionServiceImpl::removeVersion, где FixVersionServiceImpl - имя текущего класса?Метод обновления с Collection :: add и Collection :: remove

private boolean updateIssueVersion(User user, 
             IssuesVersionUpdateDescription issueVersionUpdate, 
             Version version, 
             BiFunction<Version, Collection<Version>, Boolean> function) { 
     boolean updated = false; 
     for (String issueKey : issueVersionUpdate.getIssueKeys()) { 
      IssueService.IssueResult issueResult = issueService.getIssue(user, issueKey); 
      MutableIssue issue = issueResult.getIssue(); 
      if (issue == null) { 
       LOG.info("Issue was not found for user."); 
       continue; 
      } 

      if (issue.getProjectObject() == null 
       || !issue.getProjectObject().getKey().equals(version.getProject().getKey())) { 
       LOG.error("Issue project doesn't contain this fix version."); 
       continue; 
      } 
      Collection<Version> fixVersions = issue.getFixVersions(); 
      function.apply(version, fixVersions); 
      issue.setFixVersions(fixVersions); 
      issueManager.updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false); 
      updated = true; 
     } 
     return updated; 
    } 

    private static boolean addVersion(Version version, Collection<Version> fixVersions) { 
     return fixVersions.add(version); 
    } 

    private static boolean removeVersion(Version version, Collection<Version> fixVersions) { 
     return fixVersions.remove(version); 
    } 

ответ

2

Collection::add и ::remove имеют тип BiFunction<Collection<T>, T, Boolean>, где первый тип относится к ограждающих экземпляр коллекции. Таким образом, чтобы передать эти методы в качестве аргумента и использовать их как лямбда, как:

function.apply(fixVersions, version); 

вам нужно изменить тип этого аргумента BiFunction<Collection<Version>, Version, Boolean>.