Google Коллекции Отличный Предикат - PullRequest
3 голосов
/ 27 октября 2010

Как реализовать отдельный предикат для использования с методом Google Collections Collections2.filter?

Ответы [ 2 ]

9 голосов
/ 27 октября 2010

Если я вас правильно понимаю, я не уверен, что Predicate является правильным решением здесь:

Создание такого предиката потребовало бы поддержания какого-то состояния (т. Е. Поддержания набора вещей, который он имеетвидел уже).Это явно не рекомендуется в javadoc.

Обычный способ получить отдельные элементы в коллекции - просто добавить их все в набор.то есть:

Set<T> uniqueItems = Sets.newHashSet(collectionWithPotentialDuplicates);

Если методы equals () и hashCode () в <T> не определяют уникальность так, как вам нужно, то вы должны написать вспомогательный метод, который работает с Collection<T> иFunction<T, Object>, который возвращает элементы типа T, которые являются уникальными после преобразования с использованием Function

0 голосов
/ 28 июня 2015

Мое решение:

// Create unique list
final Set<String> unique = new HashSet<String>(FluentIterable
                                                .from(sourceList)
                                                .transform(new Function<T, String>() {
                                                    @Override
                                                    public String apply(T input) {
                                                        // Here we create unique entry
                                                        return input.toString(); 
                                                    }
                                                }).toSet());
// Filter and remove duplicates
return FluentIterable
        .from(prePscRowList)
        .filter(new Predicate<T>() {
            @Override
            public boolean apply(T input) {
                boolean exist = false;
                if(unique.contains(input.toString())){
                    unique.remove(input.toString());
                    exist = true;
                }
                return exist;
            }
        }).toList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...