public ArrayList applyFilter(ArrayList list, boolean clone) { synchronized (list) { if (clone) { list = Util.cloneList(list); } if (filters != null && list != null && !filters.isEmpty() && !list.isEmpty()) { Iterator<NewsArticle> it = list.iterator(); elements: while (it.hasNext()) { NewsArticle item = it.next(); for (FilterVO filter : filters) { if (filter.getAttribute().equals(Constants.ARTICLE_SCORE) || filter.getAttribute().equals(Constants.ARTICLE_RAW_SCORE_MAP)) { double value = Double.valueOf(filter.getValue()); double attribute = (Double) convertAttribute(filter.getAttribute(), item); if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO) && attribute != value) { it.remove(); continue elements; } else if (filter.getOperator().equals(Constants.FILTER_HIGHER_THAN) && attribute <= value) { it.remove(); continue elements; } else if (filter.getOperator().equals(Constants.FILTER_LOWER_THAN) && attribute >= value) { it.remove(); continue elements; } } else if (filter.getAttribute().equals(Constants.ARTICLE_INDEX)) { int value = Integer.valueOf(filter.getValue()); int attribute = (Integer) convertAttribute(filter.getAttribute(), item); if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO) && attribute != value) { it.remove(); continue elements; } else if (filter.getOperator().equals(Constants.FILTER_HIGHER_THAN) && attribute <= value) { it.remove(); continue elements; } else if (filter.getOperator().equals(Constants.FILTER_LOWER_THAN) && attribute >= value) { it.remove(); continue elements; } } else { String attribute = (String) convertAttribute(filter.getAttribute(), item); if (filter.getOperator().equals(Constants.FILTER_EQUALS_TO) && attribute.equalsIgnoreCase(filter.getValue()) == false) { it.remove(); continue elements; } else if (filter.getOperator().equals(Constants.FILTER_CONTAINS_STRING) && attribute.contains(filter.getValue()) == false) { it.remove(); continue elements; } } } } } isApplyFilter = false; return list; } }