![JAR search and dependency download from the Maven repository](/logo.png)
de.scravy.bedrock.Container Maven / Gradle / Ivy
package de.scravy.bedrock;
import javax.annotation.Nonnull;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import static de.scravy.bedrock.Functions.curry;
import static de.scravy.bedrock.Functions.predicate;
@FunctionalInterface
public interface Container extends ExtendedIterable {
default boolean isEmpty() {
return !iterator().hasNext();
}
default boolean nonEmpty() {
return !isEmpty();
}
@Nonnull
default String asString() {
final StringBuilder b = new StringBuilder();
forEach(b::append);
return b.toString();
}
@Nonnull
default String asString(@Nonnull final String delimiter) {
return stream().map(Objects::toString).collect(Collectors.joining(delimiter));
}
default E draw(@Nonnull final Random random) throws NoSuchElementException {
if (isEmpty()) {
throw new NoSuchElementException();
}
return Seq.ofCollectionInternal(toList()).draw(random);
}
default E draw() throws NoSuchElementException {
return draw(ThreadLocalRandom.current());
}
default boolean forAll(@Nonnull final Predicate super E> predicate) {
Objects.requireNonNull(predicate, "'predicate' must not be null");
for (final E e : this) {
if (!predicate.test(e)) {
return false;
}
}
return true;
}
default boolean exists(@Nonnull final Predicate super E> predicate) {
Objects.requireNonNull(predicate, "'predicate' must not be null");
for (final E e : this) {
if (predicate.test(e)) {
return true;
}
}
return false;
}
default boolean contains(final E element) {
return exists(predicate(curry(Objects::equals).apply(element)));
}
@Nonnull
default Stream stream() {
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), 0), false);
}
@Nonnull
default List toList() {
final List list = new ArrayList<>();
for (final E e : this) {
list.add(e);
}
return list;
}
static Container fromIterable(final Iterable e) {
return e::iterator;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy