public static Optional <TValue> Find <TKey, TValue>(this IDictionary <TKey, TValue> dictionary, TKey key) { if (dictionary.TryGetValue(key, out var value)) { return(Optional.Some(value)); } return(Optional.None <TValue>()); }
public static Optional <U> Apply <T, U>(this Optional <T> optional, Optional <Func <T, U> > applier) { if (optional.HasValue && applier.HasValue) { return(Optional.Some(applier.Value(optional.Value))); } return(Optional.None <U>()); }
public static Optional <TKey> FindKey <TKey, TValue>(this IDictionary <TKey, TValue> dictionary, Func <TKey, TValue, bool> predicate) { foreach (var kvp in dictionary) { if (predicate(kvp.Key, kvp.Value)) { return(Optional.Some(kvp.Key)); } } return(Optional.None <TKey>()); }
public static Optional <T> FindValue <T>(this IList <T> list, Func <T, bool> predicate) { foreach (var item in list) { if (predicate(item)) { return(Optional.Some(item)); } } return(Optional.None <T>()); }
public static Optional <T> Filter <T>(this Optional <T> optional, Predicate <T> filter) { return(optional.FlatMap(t => filter(t) ? Optional.Some(t) : Optional.None <T>())); }
public static Optional <U> Map <T, U>(this Optional <T> optional, Func <T, U> mapper) { return(optional.FlatMap(t => Optional.Some(mapper(t)))); }