package uk.kludje.experimental.collect;
import uk.kludje.Ensure;
import uk.kludje.Nullifier;
import java.util.Iterator;
import java.util.Map;
/**
*
*/
public final class CollectionNullifiers {
private CollectionNullifiers() {}
/**
*
*
* @param <E>
* @param <I> a collection of elements
* @return
*/
public static <E, I extends Iterable<E>> Nullifier<I, E> first() {
return CollectionNullifiers::firstElement;
}
private static <E, I extends Iterable<E>> E firstElement(I source) {
if (source == null) {
return null;
}
Iterator<E> iterator = source.iterator();
Ensure.that(iterator != null, "iterator != null");
return iterator.hasNext()
? iterator.next()
: null;
}
public static <R, M extends Map<?, R>> Nullifier<M, R> keyed(Object key) {
Ensure.that(key != null, "key != null");
return map -> fromMapKey(map, key);
}
private static <R, M extends Map<?, R>> R fromMapKey(M map, Object key) {
if (map == null) {
return null;
}
return map.get(key);
}
}