Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

365 Commits
365 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

throwing-function

ci pitest Maven Central Version javadoc libs.tech recommends

Stargazers over time

Checked-exception-enabled Java functional interfaces — a zero-dependency drop-in for java.util.function.

The Problem

Java's java.util.function interfaces don't support checked exceptions, turning clean one-liners into verbose try-catch blocks:

// what you want
.map(path -> new URI(path))

// what Java forces you to write
.map(path -> {
    try {
        return new URI(path);
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
})

The Solution

throwing-function provides checked-exception-aware variants of all standard functional interfaces:

ThrowingFunction<String, URI, URISyntaxException> toUri = URI::new;

And adapters to integrate them into standard Java APIs:

stream.map(ThrowingFunction.unchecked(URI::new))
      .forEach(System.out::println);

Functional Interfaces

Interface Functional method
ThrowingFunction<T, R, E> R apply(T t) throws E
ThrowingBiFunction<T1, T2, R, E> R apply(T1 t1, T2 t2) throws E
ThrowingUnaryOperator<T, E> T apply(T t) throws E
ThrowingBinaryOperator<T, E> T apply(T t1, T t2) throws E
ThrowingConsumer<T, E> void accept(T t) throws E
ThrowingBiConsumer<T, U, E> void accept(T t, U u) throws E
ThrowingSupplier<T, E> T get() throws E
ThrowingPredicate<T, E> boolean test(T t) throws E
ThrowingBiPredicate<T, U, E> boolean test(T t, U u) throws E
ThrowingRunnable<E> void run() throws E
ThrowingToLongFunction<T, E> long applyAsLong(T t) throws E

Adapters

Each interface provides static adapter methods to bridge Throwing* instances into standard java.util.function types.

unchecked — wrap in CheckedException

Wraps the checked exception in a CheckedException (a RuntimeException subclass) and rethrows it. Available on all interfaces.

stream.map(ThrowingFunction.unchecked(URI::new))
      .forEach(System.out::println);

sneaky — rethrow without wrapping

Rethrows the checked exception as-is, bypassing the compiler's checked-exception enforcement via type erasure. Available on all interfaces.

stream.map(ThrowingFunction.sneaky(URI::new))
      .forEach(System.out::println);

lifted / optional — return Optional

Returns the result wrapped in an Optional, or Optional.empty() on exception. No exception is propagated.

  • ThrowingFunction.lifted(f)Function<T, Optional<R>>
  • ThrowingBiFunction.optional(f)BiFunction<T1, T2, Optional<R>>
  • ThrowingSupplier.optional(s)Supplier<Optional<T>>
stream.map(ThrowingFunction.lifted(URI::new))  // Stream<Optional<URI>>
      .forEach(System.out::println);

Installation

Maven

<dependency>
    <groupId>com.pivovarit</groupId>
    <artifactId>throwing-function</artifactId>
    <version>1.6.1</version>
</dependency>

Gradle

implementation 'com.pivovarit:throwing-function:1.6.1'

Used by

  • bbottema/simple-java-mail — Simple Java Mail, one of the most widely used Jakarta Mail / SMTP wrappers in the Java ecosystem.

Dependencies

None. Implemented using core Java libraries only.

About

Checked Exceptions-enabled Java 8+ functional interfaces + adapters

Topics

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.