def map(self, func): func = to_unary(func) if self: res = func(self._value) ensure(not isinstance(res, Opt), lambda: 'map: result Opt not expected', stack_level=2) return Opt(res) else: return Opt.none()
def sort_desc(self, key=identity): key = to_unary(key) return sorted(self._iterable, key=key, reverse=True)
def _adjust_selectors(key_selector, value_selector): if key_selector is None and value_selector is None: return operator.itemgetter(0), operator.itemgetter(1) else: return to_unary(key_selector) or identity, to_unary( value_selector) or identity
def sort(self, key=identity): key = to_unary(key) return sorted(self._iterable, key=key)
def replace_if(self, pred, new_value): pred = to_unary(pred) return self.map(lambda item: new_value if pred(item) else item)
def drop_until(self, pred): pred = to_unary(pred) return self.drop_while(negate(pred))
def take_until(self, pred): pred = to_unary(pred) return self.take_while(negate(pred))
def drop_while(self, pred): pred = to_unary(pred) return itertools.dropwhile(pred, self._iterable)
def take_while(self, pred): pred = to_unary(pred) return itertools.takewhile(pred, self._iterable)
def drop_if(self, pred): pred = to_unary(pred) return self.filter(negate(pred))
def filter(self, pred): pred = to_unary(pred) return filter(pred, self._iterable)
def map(self, func): func = to_unary(func) return map(func, self._iterable)
def flat_map(self, func): func = to_unary(func) if self: return Opt(func(self._value)) else: return Opt.none()
def filter(self, pred): pred = to_unary(pred) if self.matches(pred): return self else: return Opt.none()
def matches(self, pred): pred = to_unary(pred) return self and pred(self._value)