https://github.com/pivovarit/throwing-function
  
  
    Checked Exceptions-enabled Java 8+ functional interfaces + adapters 
    https://github.com/pivovarit/throwing-function
  
exception-handling functional-programming hacktoberfest java-8
        Last synced: 6 months ago 
        JSON representation
    
Checked Exceptions-enabled Java 8+ functional interfaces + adapters
- Host: GitHub
- URL: https://github.com/pivovarit/throwing-function
- Owner: pivovarit
- License: apache-2.0
- Created: 2015-11-27T08:16:59.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2025-05-12T05:54:55.000Z (6 months ago)
- Last Synced: 2025-05-12T06:37:55.922Z (6 months ago)
- Topics: exception-handling, functional-programming, hacktoberfest, java-8
- Language: Java
- Homepage:
- Size: 383 KB
- Stars: 383
- Watchers: 17
- Forks: 60
- Open Issues: 6
- 
            Metadata Files:
            - Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Codeowners: .github/CODEOWNERS
 
Awesome Lists containing this project
README
          # Checked-Exceptions-enabled Java 8+ Functional Interfaces
[](https://github.com/pivovarit/throwing-function/actions/workflows/ci.yml)
[](http://www.apache.org/licenses/LICENSE-2.0.html)

[](https://libs.tech/project/46967967/throwing-function)
[](https://starchart.cc/pivovarit/throwing-function)
## Overview
Java’s standard `java.util.function` interfaces are not compatible with checked exceptions. This leads to verbose and cluttered code, requiring manual try-catch blocks for exception handling, which makes one-liners like this:
```
path -> new URI(path)
```
become as verbose as:
```
path -> {
    try {
        return new URI(path);
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}
```    
This library introduces checked-exception-enabled functional interfaces, like `ThrowingFunction`, allowing cleaner, more concise code. You can now handle exceptions in functional pipelines without sacrificing readability:
    ThrowingFunction toUri = URI::new;
Using the `ThrowingFunction#unchecked` adapter, this can be seamlessly integrated into standard streams:
    ...stream()
      .map(unchecked(URI::new)) // static import of ThrowingFunction#unchecked
      .forEach(System.out::println);
This eliminates the need for bulky try-catch blocks within stream operations:
     ...stream().map(path -> {
         try {
             return new URI(path);
         } catch (URISyntaxException e) {
             throw new RuntimeException(e);
         }}).forEach(System.out::println);
### Key Features
- Functional Interfaces: Supports various functional types with checked exceptions.
- Adapters: Provides utility methods to convert `Throwing*` types into standard Java functional interfaces.
- Lightweight: No external dependencies, implemented using core Java libraries.
### Core API
#### Functional Interfaces
- [ThrowingFunction](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingFunction.java)
- [ThrowingIntFunction](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingIntFunction.java)
- [ThrowingToLongFunction](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingToLongFunction.java)
- [ThrowingBiConsumer](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingBiConsumer.java)
- [ThrowingBiFunction](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingBiFunction.java)
- [ThrowingBiPredicate](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingBiPredicate.java)
- [ThrowingBinaryOperator](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingBinaryOperator.java)
- [ThrowingConsumer](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingConsumer.java)
- [ThrowingPredicate](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingPredicate.java)
- [ThrowingRunnable](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingRunnable.java)
- [ThrowingSupplier](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingSupplier.java)
- [ThrowingUnaryOperator](https://github.com/pivovarit/throwing-function/blob/master/src/main/java/com/pivovarit/function/ThrowingUnaryOperator.java)
#### Adapters
+ `static Function unchecked(ThrowingFunction<> f) {...}`
Transforms a `ThrowingFunction` instance into a standard `java.util.function.Function` by wrapping checked exceptions in a `RuntimeException` and rethrowing them. 
+ `static Function> lifted() {...}`
Transforms a `ThrowingFunction` instance into a regular `Function` returning result wrapped in an `Optional` instance. 
+ `default ThrowingFunction asFunction() {...}`
Returns `Throwing(Predicate|Supplier|Consumer`) instance as a new `ThrowingFunction` instance.
### Maven Central
    
        com.pivovarit
        throwing-function
        1.6.1
    
    
##### Gradle
    compile 'com.pivovarit:throwing-function:1.6.1'
### Dependencies
None - the library is implemented using core Java libraries.
## Version history
## [1.6.1 (25-09-2024)](https://github.com/pivovarit/throwing-function/releases/tag/1.6.1)
* Explicit module configuration via a multi-release jar
* Improved Javadoc 
### [1.6.0 (24-09-2024)](https://github.com/pivovarit/throwing-function/releases/tag/1.6.0)
* Added `Automatic-Module-Name` to MANIFEST
### [1.5.1 (06-05-2020)](https://github.com/pivovarit/throwing-function/releases/tag/1.5.1)
* Fixed visibility issues with `ThrowingIntFunction`
### [1.5.0 (26-01-2019)](https://github.com/pivovarit/throwing-function/releases/tag/1.5.0)
* Introduced proper [Semantic Versioning](https://semver.org)
* Introduced `ThrowingIntFunction`
* Moved interfaces to `com.pivovarit.function`
* Removed controversial `unwrap()` functionality