@Override public <U> Match<U> map(Function<? super T, ? extends U> mapper) { return Match.of(mapper.apply(value), captures()); }
@Override public <T> Match<T> matchTypeOf(TypeOfPattern<T> typeOfPattern, Object object, Captures captures) { Class<T> expectedClass = typeOfPattern.expectedClass(); if (expectedClass.isInstance(object)) { return Match.of(expectedClass.cast(object), captures); } else { return Match.empty(); } }
@Override public <T> Match<T> matchEquals(EqualsPattern<T> equalsPattern, Object object, Captures captures) { return Match.of((T) object, captures).filter(equalsPattern.expectedValue()::equals); }
@Override public <T> Match<T> matchFilter(FilterPattern<T> filterPattern, Object object, Captures captures) { return Match.of((T) object, captures).filter(filterPattern.predicate()); } }
@Override public <T> Match<T> matchCapture(CapturePattern<T> capturePattern, Object object, Captures captures) { return Match.of((T) object, captures.addAll(Captures.ofNullable(capturePattern.capture(), (T) object))); }
@Override public <U> Match<U> map(Function<? super T, ? extends U> mapper) { return Match.of(mapper.apply(value), captures()); }
@Override public <T> Match<T> matchTypeOf(TypeOfPattern<T> typeOfPattern, Object object, Captures captures) { Class<T> expectedClass = typeOfPattern.expectedClass(); if (expectedClass.isInstance(object)) { return Match.of(expectedClass.cast(object), captures); } else { return Match.empty(); } }
@Override public <T> Match<T> matchEquals(EqualsPattern<T> equalsPattern, Object object, Captures captures) { return Match.of((T) object, captures).filter(equalsPattern.expectedValue()::equals); }
@Override public <T> Match<T> matchFilter(FilterPattern<T> filterPattern, Object object, Captures captures) { return Match.of((T) object, captures).filter(filterPattern.predicate()); } }
@Override public <T> Match<T> matchCapture(CapturePattern<T> capturePattern, Object object, Captures captures) { return Match.of((T) object, captures.addAll(Captures.ofNullable(capturePattern.capture(), (T) object))); }