/*
* Copyright 2008-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package griffon.javafx.beans.binding;
import javafx.beans.binding.BooleanBinding;
import javafx.beans.binding.DoubleBinding;
import javafx.beans.binding.FloatBinding;
import javafx.beans.binding.IntegerBinding;
import javafx.beans.binding.LongBinding;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.binding.StringBinding;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;
import javafx.collections.ObservableSet;
import javax.annotation.Nonnull;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import static java.util.Objects.requireNonNull;
import static javafx.beans.binding.Bindings.createBooleanBinding;
import static javafx.beans.binding.Bindings.createDoubleBinding;
import static javafx.beans.binding.Bindings.createFloatBinding;
import static javafx.beans.binding.Bindings.createIntegerBinding;
import static javafx.beans.binding.Bindings.createLongBinding;
import static javafx.beans.binding.Bindings.createObjectBinding;
import static javafx.beans.binding.Bindings.createStringBinding;
/**
* @author Andres Almiray
* @since 2.10.0
*/
public final class FilteringBindings {
private static final String ERROR_ITEMS_NULL = "Argument 'items' must not be null";
private static final String ERROR_FILTER_NULL = "Argument 'filter' must not be null";
private static final String ERROR_MAPPER_NULL = "Argument 'mapper' must not be null";
private static final String ERROR_SUPPLIER_NULL = "Argument 'supplier' must not be null";
private FilteringBindings() {
// prevent instantiation
}
/**
* Creates an object binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final T defaultValue, @Nonnull final Predicate<? super T> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<T> supplier, @Nonnull final Predicate<? super T> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final T defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an object binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<T> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableList<Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableList<Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableList<Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableList<Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an integer binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableList<Integer> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableList<Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableList<Integer> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an integer binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableList<Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a long binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableList<Long> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableList<Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableList<Long> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a long binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableList<Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a float binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableList<Float> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableList<Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableList<Float> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a float binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableList<Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a double binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableList<Double> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableList<Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableList<Double> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a double binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableList<Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a string binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableList<String> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableList<String> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableList<String> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a string binding with the first element of an observable list after filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableList<String> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an object binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final T defaultValue, @Nonnull final Predicate<? super T> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<T> supplier, @Nonnull final Predicate<? super T> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final T defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an object binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an object binding
*/
@Nonnull
public static <T> ObjectBinding<T> filterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<T> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableSet<Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableSet<Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableSet<Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a boolean binding
*/
@Nonnull
public static BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableSet<Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an integer binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableSet<Integer> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableSet<Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableSet<Integer> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an integer binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return an integer binding
*/
@Nonnull
public static IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableSet<Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a long binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableSet<Long> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableSet<Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableSet<Long> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a long binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a long binding
*/
@Nonnull
public static LongBinding filterThenFindFirstLong(@Nonnull final ObservableSet<Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a float binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableSet<Float> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableSet<Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableSet<Float> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a float binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a float binding
*/
@Nonnull
public static FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableSet<Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a double binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableSet<Double> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableSet<Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableSet<Double> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a double binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a double binding
*/
@Nonnull
public static DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableSet<Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a string binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableSet<String> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableSet<String> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableSet<String> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a string binding with the first element of an observable set after filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element
*
* @return a string binding
*/
@Nonnull
public static StringBinding filterThenFindFirstString(@Nonnull final ObservableSet<String> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an object binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an object binding
*/
@Nonnull
public static <K, V> ObjectBinding<V> filterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final V defaultValue, @Nonnull final Predicate<? super V> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an object binding
*/
@Nonnull
public static <K, V> ObjectBinding<V> filterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<V> supplier, @Nonnull final Predicate<? super V> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an object binding
*/
@Nonnull
public static <K, V> ObjectBinding<V> filterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final V defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an object binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an object binding
*/
@Nonnull
public static <K, V> ObjectBinding<V> filterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<V> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a boolean binding
*/
@Nonnull
public static <K> BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableMap<K, Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a boolean binding
*/
@Nonnull
public static <K> BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableMap<K, Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a boolean binding
*/
@Nonnull
public static <K> BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableMap<K, Boolean> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a boolean binding
*/
@Nonnull
public static <K> BooleanBinding filterThenFindFirstBoolean(@Nonnull final ObservableMap<K, Boolean> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Predicate<? super Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an integer binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an integer binding
*/
@Nonnull
public static <K> IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableMap<K, Integer> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an integer binding
*/
@Nonnull
public static <K> IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableMap<K, Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an integer binding
*/
@Nonnull
public static <K> IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableMap<K, Integer> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates an integer binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return an integer binding
*/
@Nonnull
public static <K> IntegerBinding filterThenFindFirstInteger(@Nonnull final ObservableMap<K, Integer> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Predicate<? super Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a long binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a long binding
*/
@Nonnull
public static <K> LongBinding filterThenFindFirstLong(@Nonnull final ObservableMap<K, Long> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a long binding
*/
@Nonnull
public static <K> LongBinding filterThenFindFirstLong(@Nonnull final ObservableMap<K, Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a long binding
*/
@Nonnull
public static <K> LongBinding filterThenFindFirstLong(@Nonnull final ObservableMap<K, Long> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a long binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a long binding
*/
@Nonnull
public static <K> LongBinding filterThenFindFirstLong(@Nonnull final ObservableMap<K, Long> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Predicate<? super Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a float binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a float binding
*/
@Nonnull
public static <K> FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableMap<K, Float> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a float binding
*/
@Nonnull
public static <K> FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableMap<K, Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a float binding
*/
@Nonnull
public static <K> FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableMap<K, Float> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a float binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a float binding
*/
@Nonnull
public static <K> FloatBinding filterThenFindFirstFloat(@Nonnull final ObservableMap<K, Float> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Predicate<? super Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a double binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a double binding
*/
@Nonnull
public static <K> DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableMap<K, Double> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a double binding
*/
@Nonnull
public static <K> DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableMap<K, Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a double binding
*/
@Nonnull
public static <K> DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableMap<K, Double> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a double binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a double binding
*/
@Nonnull
public static <K> DoubleBinding filterThenFindFirstDouble(@Nonnull final ObservableMap<K, Double> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Predicate<? super Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates a string binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a string binding
*/
@Nonnull
public static <K> StringBinding filterThenFindFirstString(@Nonnull final ObservableMap<K, String> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.values().stream().filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a string binding
*/
@Nonnull
public static <K> StringBinding filterThenFindFirstString(@Nonnull final ObservableMap<K, String> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.values().stream().filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a string binding
*/
@Nonnull
public static <K> StringBinding filterThenFindFirstString(@Nonnull final ObservableMap<K, String> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElse(defaultValue);
}, items, filter);
}
/**
* Creates a string binding with the first value of an observable map after filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value
*
* @return a string binding
*/
@Nonnull
public static <K> StringBinding filterThenFindFirstString(@Nonnull final ObservableMap<K, String> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Predicate<? super String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).findFirst().orElseGet(supplier);
}, items, filter);
}
/**
* Creates an object binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final R defaultValue, @Nonnull final Function<? super T, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final Function<? super T, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Function<? super T, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Function<? super T, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Boolean defaultValue, @Nonnull final Function<? super T, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Function<? super T, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Integer defaultValue, @Nonnull final Function<? super T, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Function<? super T, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Long defaultValue, @Nonnull final Function<? super T, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Function<? super T, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Function<? super T, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Function<? super T, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Float defaultValue, @Nonnull final Function<? super T, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Function<? super T, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Function<? super T, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Function<? super T, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Double defaultValue, @Nonnull final Function<? super T, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Function<? super T, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Function<? super T, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Function<? super T, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final String defaultValue, @Nonnull final Function<? super T, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final Function<? super T, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Function<? super T, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable list after mapping and filtering.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Function<? super T, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final R defaultValue, @Nonnull final Function<? super T, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final Function<? super T, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Function<? super T, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Function<? super T, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Boolean defaultValue, @Nonnull final Function<? super T, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Function<? super T, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Integer defaultValue, @Nonnull final Function<? super T, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Function<? super T, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Long defaultValue, @Nonnull final Function<? super T, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Function<? super T, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Function<? super T, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Function<? super T, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Float defaultValue, @Nonnull final Function<? super T, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Function<? super T, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Function<? super T, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Function<? super T, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Double defaultValue, @Nonnull final Function<? super T, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Function<? super T, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Function<? super T, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Function<? super T, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final String defaultValue, @Nonnull final Function<? super T, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final Function<? super T, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Function<? super T, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable set after mapping and filtering.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each element before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each element after mapping.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Function<? super T, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final R defaultValue, @Nonnull final Function<? super V, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<R> supplier, @Nonnull final Function<? super V, R> mapper, @Nonnull final Predicate<? super R> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Function<? super V, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super V, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> mapThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Function<? super V, R>> mapper, @Nonnull final ObservableValue<Predicate<? super R>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createObjectBinding(() -> {
Function<? super V, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super R> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Boolean defaultValue, @Nonnull final Function<? super V, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Function<? super V, Boolean> mapper, @Nonnull final Predicate<Boolean> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Function<? super V, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super V, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding mapToBooleanThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Function<? super V, Boolean>> mapper, @Nonnull final ObservableValue<Predicate<Boolean>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createBooleanBinding(() -> {
Function<? super V, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Boolean> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Integer defaultValue, @Nonnull final Function<? super V, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Function<? super V, Integer> mapper, @Nonnull final Predicate<Integer> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Function<? super V, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super V, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding mapToIntegerThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Function<? super V, Integer>> mapper, @Nonnull final ObservableValue<Predicate<Integer>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createIntegerBinding(() -> {
Function<? super V, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Integer> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Long defaultValue, @Nonnull final Function<? super V, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Function<? super V, Long> mapper, @Nonnull final Predicate<Long> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Function<? super V, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super V, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding mapToLongThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Function<? super V, Long>> mapper, @Nonnull final ObservableValue<Predicate<Long>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createLongBinding(() -> {
Function<? super V, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Long> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Float defaultValue, @Nonnull final Function<? super V, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Function<? super V, Float> mapper, @Nonnull final Predicate<Float> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Function<? super V, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super V, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding mapToFloatThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Function<? super V, Float>> mapper, @Nonnull final ObservableValue<Predicate<Float>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createFloatBinding(() -> {
Function<? super V, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Float> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Double defaultValue, @Nonnull final Function<? super V, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Function<? super V, Double> mapper, @Nonnull final Predicate<Double> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Function<? super V, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super V, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding mapToDoubleThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Function<? super V, Double>> mapper, @Nonnull final ObservableValue<Predicate<Double>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createDoubleBinding(() -> {
Function<? super V, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<Double> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final String defaultValue, @Nonnull final Function<? super V, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<String> supplier, @Nonnull final Function<? super V, String> mapper, @Nonnull final Predicate<String> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> items.values().stream().map(mapper).filter(filter).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Function<? super V, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super V, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first value of an observable map after mapping and filtering.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param mapper a non-interfering, stateless function to apply to the each value before filtering.
* @param filter a non-interfering, stateless predicate to apply to the each value after mapping.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding mapToStringThenFilterThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Function<? super V, String>> mapper, @Nonnull final ObservableValue<Predicate<String>> filter) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
return createStringBinding(() -> {
Function<? super V, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<String> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().map(mapperValue).filter(filterValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final R defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable list after filtering and mapping.
*
* @param items the observable list of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableList<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final R defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an object binding
*/
@Nonnull
public static <T, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super T, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <T> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super T, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <T> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super T, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a long binding
*/
@Nonnull
public static <T> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super T, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a float binding
*/
@Nonnull
public static <T> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super T, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a double binding
*/
@Nonnull
public static <T> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super T, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super T> filter, @Nonnull final Function<? super T, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first element of an observable set after filtering and mapping.
*
* @param items the observable set of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each element before mapping.
* @param mapper a non-interfering, stateless function to apply to the each element after filtering.
*
* @return a string binding
*/
@Nonnull
public static <T> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableSet<T> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super T>> filter, @Nonnull final ObservableValue<Function<? super T, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super T, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super T> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final R defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an object binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<R> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, R> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an object binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final R defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super V, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an object binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an object binding
*/
@Nonnull
public static <K, V, R> ObjectBinding<R> filterThenMapThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<R> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, R>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createObjectBinding(() -> {
Function<? super V, R> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Boolean defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Boolean> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Boolean defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super V, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a boolean binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a boolean binding
*/
@Nonnull
public static <K, V> BooleanBinding filterThenMapToBooleanThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Boolean> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Boolean>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createBooleanBinding(() -> {
Function<? super V, Boolean> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Integer defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates an integer binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Integer> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates an integer binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Integer defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super V, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates an integer binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return an integer binding
*/
@Nonnull
public static <K, V> IntegerBinding filterThenMapToIntegerThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Integer> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Integer>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createIntegerBinding(() -> {
Function<? super V, Integer> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Long defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a long binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Long> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Long> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a long binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Long defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super V, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a long binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a long binding
*/
@Nonnull
public static <K, V> LongBinding filterThenMapToLongThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Long> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Long>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createLongBinding(() -> {
Function<? super V, Long> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Float defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a float binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Float> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Float> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a float binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Float defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super V, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a float binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a float binding
*/
@Nonnull
public static <K, V> FloatBinding filterThenMapToFloatThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Float> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Float>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createFloatBinding(() -> {
Function<? super V, Float> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Double defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a double binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Double> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, Double> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a double binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Double defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super V, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a double binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a double binding
*/
@Nonnull
public static <K, V> DoubleBinding filterThenMapToDoubleThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<Double> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, Double>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createDoubleBinding(() -> {
Function<? super V, Double> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final String defaultValue, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElse(defaultValue), items);
}
/**
* Creates a string binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<String> supplier, @Nonnull final Predicate<? super V> filter, @Nonnull final Function<? super V, String> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> items.values().stream().filter(filter).map(mapper).findFirst().orElseGet(supplier), items);
}
/**
* Creates a string binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param defaultValue the value to be returned if there is no value present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final String defaultValue, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super V, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElse(defaultValue);
}, items, mapper, filter);
}
/**
* Creates a string binding with the first value of an observable map after filtering and mapping.
*
* @param items the observable map of items.
* @param supplier a {@code Supplier} whose result is returned if no value is present.
* @param filter a non-interfering, stateless predicate to apply to the each value before mapping.
* @param mapper a non-interfering, stateless function to apply to the each value after filtering.
*
* @return a string binding
*/
@Nonnull
public static <K, V> StringBinding filterThenMapToStringThenFindFirst(@Nonnull final ObservableMap<K, V> items, @Nonnull final Supplier<String> supplier, @Nonnull final ObservableValue<Predicate<? super V>> filter, @Nonnull final ObservableValue<Function<? super V, String>> mapper) {
requireNonNull(items, ERROR_ITEMS_NULL);
requireNonNull(supplier, ERROR_SUPPLIER_NULL);
requireNonNull(filter, ERROR_FILTER_NULL);
requireNonNull(mapper, ERROR_MAPPER_NULL);
return createStringBinding(() -> {
Function<? super V, String> mapperValue = mapper.getValue();
requireNonNull(mapperValue, ERROR_MAPPER_NULL);
Predicate<? super V> filterValue = filter.getValue();
requireNonNull(filterValue, ERROR_FILTER_NULL);
return items.values().stream().filter(filterValue).map(mapperValue).findFirst().orElseGet(supplier);
}, items, mapper, filter);
}
}