使用Java从Alfresco中的搜索查询中过滤掉特定对象

时间:2010-03-31 01:45:07

标签: java filter alfresco

我有一个包含我从数据库中检索到的所有组的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 个答案:

答案 0 :(得分:1)

在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);
  }
}

即使存在大量群体,这也会很快,因为每个群体都会在恒定时间内被查找。