/** * Wraps this data provider to create a new data provider that is filtered * by testing whether the value of a property is equals to the filter value * provided in the query. Equality is tested using * {@link Objects#equals(Object, Object)}. * * @param valueProvider * a value provider that gets the property value, not * <code>null</code> * * @return a data provider that filters accordingly, not <code>null</code> */ public default <V> DataProvider<T, V> filteringByEquals( ValueProvider<T, V> valueProvider) { return filteringBy(valueProvider, Objects::equals); }
/** * Wraps a given data provider so that its filter ignores null items * returned by the given value provider. * * @param dataProvider * the data provider to wrap * @param valueProvider * the value provider for providing values to filter * @param predicate * the predicate to combine null filtering with * @return the wrapped data provider */ public static <T, V, Q> DataProvider<T, Q> filteringByIgnoreNull( InMemoryDataProvider<T> dataProvider, ValueProvider<T, V> valueProvider, SerializableBiPredicate<V, Q> predicate) { Objects.requireNonNull(predicate, "Predicate cannot be null"); return dataProvider.filteringBy(valueProvider, (itemValue, queryFilter) -> itemValue != null && predicate.test(itemValue, queryFilter)); }
/** * Wraps this data provider to create a new data provider that is filtered * by comparing an item property value to the filter value provided in the * query. * <p> * The predicate receives the property value as the first parameter and the * query filter value as the second parameter, and should return * <code>true</code> if the corresponding item should be included. The query * filter value is never <code>null</code> – all items are included without * running either callback if the query doesn't define any filter. * * @param valueProvider * a value provider that gets the property value, not * <code>null</code> * @param predicate * a predicate to use for comparing the property value to the * query filter, not <code>null</code> * * @return a data provider that filters accordingly, not <code>null</code> */ public default <V, Q> DataProvider<T, Q> filteringBy( ValueProvider<T, V> valueProvider, SerializableBiPredicate<V, Q> predicate) { Objects.requireNonNull(valueProvider, "Value provider cannot be null"); Objects.requireNonNull(predicate, "Predicate cannot be null"); return filteringBy((item, filterValue) -> predicate .test(valueProvider.apply(item), filterValue)); }