Давайте посмотрим, как фильтровать встроенный список JDK и MutableList с использованием коллекций Eclipse (ранее коллекции GS ).
List jdkList = Arrays.asList(1, 2, 3, 4, 5);
MutableList ecList = Lists.mutable.with(1, 2, 3, 4, 5);
Если вы хотите отфильтровать номера меньше 3, вы ожидаете следующие выходы.
List selected = Lists.mutable.with(1, 2);
List rejected = Lists.mutable.with(3, 4, 5);
Вот как вы можете фильтровать, используя анонимный внутренний класс, как Predicate
.
Predicate lessThan3 = new Predicate()
{
public boolean accept(Integer each)
{
return each < 3;
}
};
Assert.assertEquals(selected, Iterate.select(jdkList, lessThan3));
Assert.assertEquals(selected, ecList.select(lessThan3));
Ниже приведены некоторые альтернативы фильтрации списков JDK и Eclipse Collections MutableLists с использованием фабрики Predicates .
Assert.assertEquals(selected, Iterate.select(jdkList, Predicates.lessThan(3)));
Assert.assertEquals(selected, ecList.select(Predicates.lessThan(3)));
Вот версия, которая не выделяет объект для предиката, используя фабрику Predicates2 вместо этого с помощью метода selectWith
, который принимает значение Predicate2
.
Assert.assertEquals(
selected, ecList.selectWith(Predicates2.lessThan(), 3));
Иногда вы хотите фильтровать отрицательное состояние. В Eclipse Collections имеется специальный метод, который называется reject
.
Assert.assertEquals(rejected, Iterate.reject(jdkList, lessThan3));
Assert.assertEquals(rejected, ecList.reject(lessThan3));
Вот как вы можете фильтровать с использованием лямбда Java 8 в качестве Predicate
.
Assert.assertEquals(selected, Iterate.select(jdkList, each -> each < 3));
Assert.assertEquals(rejected, Iterate.reject(jdkList, each -> each < 3));
Assert.assertEquals(selected, gscList.select(each -> each < 3));
Assert.assertEquals(rejected, gscList.reject(each -> each < 3));
Метод partition
вернет две коллекции, содержащие элементы, выбранные и отклоненные Predicate
.
PartitionIterable jdkPartitioned = Iterate.partition(jdkList, lessThan3);
Assert.assertEquals(selected, jdkPartitioned.getSelected());
Assert.assertEquals(rejected, jdkPartitioned.getRejected());
PartitionList ecPartitioned = gscList.partition(lessThan3);
Assert.assertEquals(selected, ecPartitioned.getSelected());
Assert.assertEquals(rejected, ecPartitioned.getRejected());
Примечание: Я являюсь коммиттером для коллекций Eclipse.