在缓存的地图

时间:2016-02-08 20:01:18

标签: java hibernate caching set hashset

我刚刚编写了一个代码来缓存内存中的表(简单的java hashmap)。现在我要替换的代码之一是根据条件查找对象。它接收多个字段参数,如果这些字段不为空且不为空,则它们将作为hibernate查询条件的一部分添加。

要替换它,我想要做的是

  1. 对于每个有效参数(非空且不为空),我将创建一个满足此条件的HashSet。
  2. 一旦我为所有有效标准制作了哈希集,我将在所有集合上调用Set.retainAll(second_set)。所以最后,我将只有那个与所有有效标准相交的集合。
  3. 这听起来像是最好的方法还是有更好的方法来实现它?

    修改

    虽然,我的原帖仍然有效,我正在寻找答案。我最终以下面的方式实现它。原因是因为在创建所有集合之后,它是一种繁琐的集合,所以我必须先弄清楚哪个集合是非空的,以便可以调用retainAll。它导致了很多if-else语句。我目前的实现是这样的

    private List<MyObj> getCachedObjs(Long criteria1, String criteria2, String criteria3) {
        List<MyObj> results = new ArrayList<>();
        int totalActiveFilters = 0;
    
        if (criteria1 != null){
            totalActiveFilters++;
        }
    
        if (!StringUtil.isBlank(criteria2)){
            totalActiveFilters++;
        }
    
        if (!StringUtil.isBlank(criteria3)){
            totalActiveFilters++;
        }
    
        for (Map.Entry<Long, MyObj> objEntry : objCache.entrySet()){
            MyObj obj = objEntry.getValue();
    
            int matchedFilters = 0;
    
            if (criteria1 != null) {
                if (obj.getCriteria1().equals(criteria1)) {
                    matchedFilters++;
                }
            }
    
            if (!StringUtil.isBlank(criteria2)){
                if (obj.getCriteria2().equals(criteria2)){
                    matchedFilters++;
                }
            }
    
            if (!StringUtil.isBlank(criteria3)){
                if (game.getCriteria3().equals(criteria3)){
                    matchedFilters++;
                }
            }
    
            if (matchedFilters == totalActiveFilters){
                results.add(obj);
            }
        }
        return results;
    }
    

0 个答案:

没有答案