/** * @param comparator The comparator to use * @param filter Filter * @return Filtered list sorted with comparator */ public AttributedList<E> filter(final Comparator<E> comparator, final Filter<E> filter) { final AttributedList<E> filtered = new AttributedList<>(impl); if(null != comparator) { this.doSort(filtered.impl, comparator); } if(null != filter) { if(log.isDebugEnabled()) { log.debug(String.format("Filter list %s with filter %s", this, filter)); } filtered.impl.removeIf(new Predicate<E>() { @Override public boolean test(final E e) { return !filter.accept(e); } }); } return filtered; }