Фильтрация определенных объектов из поискового запроса в Alfresco с использованием Java - PullRequest
1 голос
/ 31 марта 2010

У меня есть HashSet, содержащий все группы, которые я получил из своей базы данных. Меня попросили отфильтровать этот результат, удалив две конкретные группы. Это кажется тривиальным, но я не могу найти надежного решения для хранения определенных групп, которые я хочу отфильтровать.

Моя идея состоит в том, чтобы просто создать массив, содержащий ссылки на две группы, которые мне нужно отфильтровать. Затем я могу отфильтровать свой поисковый запрос по тому, что находится в массиве. Я обеспокоен тем, что в будущем они могут попросить отфильтровать больше групп, и, возможно, массив не будет хорошей идеей.

//Creates the array containing groups to filter out

String[] hiddenGroups = {"group1","group2"};
//retrieves all groups
Set<String>allGroups = new HashSet<String>();
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP);
List<String>results = new ArrayList<String>();

//filters out specified groups 
for (String group : allGroups) {
  boolean isHidden = false;
  for (String hiddenGroup : hiddenGroups) {
    if (hiddenGroup.equalsIgnorecase(group)) {
      isHidden = true;
    }
  }
  if (!isHidden){
    results.add(group);
  }
}

1 Ответ

1 голос
/ 31 марта 2010

Поиск элементов в HashSet может выполняться за постоянное время. Благодаря этому вы можете сделать свой код более эффективным, не зацикливаясь на элементах в HashSet и вместо этого работая с полным набором и удаляя строки, когда вы обнаружите, что они содержатся в полном наборе.

//Creates the array containing groups to filter out

String[] hiddenGroups = {"group1","group2"};

//retrieves all groups
Set<String>allGroups = new HashSet<String>();
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP);
Set<String>results = allGroups.clone();

//filters out specified groups 
for (String group : hiddenGroups) {
  if (allGroups.contains(group)) {
    results.remove(group);
  }
}

Это будет быстро, даже если существует большое количество групп, поскольку каждая из них ищется в постоянном времени.

...