DEV Community

Discussion on: How Interfaces May Eliminate Need For Pattern Matching (sometimes)

Collapse
 
siy profile image
Sergiy Yevtushenko

It can be any function which may succeed or fail depending on conditions.

Following example is taken from real project code:

    private static Optional<Instant> parseInstantCursor(JSONObject params) {
        return safeString(params, "cursor")
            .toOptional()
            .flatMap(source -> Optional.of(source.split(":"))
                .filter(v -> v.length == 2)
                .flatMap(HighLevelApiHandler::parseInstant));
    }

    private static Optional<Instant> parseInstant(String[] pair) {
        return allOf(parseLong(pair[0]).filter(v -> v > 0), parseInt(pair[1]).filter(v -> v >= 0))
            .map(Instant::ofEpochSecond);
    }

    private static Optional<Long> parseLong(String input) {
        try {
            return Optional.of(Long.parseLong(input));
        } catch (NumberFormatException e) {
            return Optional.empty();
        }
    }
Enter fullscreen mode Exit fullscreen mode

This example also shows how looks new coding style mentioned at the beginning of the article.