Skip to content

Instantly share code, notes, and snippets.

View ayago's full-sized avatar

Adrian Yago ayago

View GitHub Profile
@ayago
ayago / SampleFunction.java
Created July 25, 2019 08:15
Defining functions in Java
import java.util.function.Function;
import static java.lang.String.format;
class Scratch {
public static void main(String[] args) {
//instantiate as an object
Function<Integer, String> stringifyInteger = stringifyInteger();
System.out.println(format("Output is %s", stringifyInteger.apply(3)));
@ayago
ayago / ComposingFunctions.java
Last active July 25, 2019 08:38
Composing Functions in Java
import java.math.BigDecimal;
import java.util.function.Function;
import static java.lang.String.format;
class ComposingFunctions {
public static void main(String[] args) {
Function<BigDecimal, Integer> asInteger = a -> a.intValue();
@ayago
ayago / SamplePartialApplication.java
Last active July 26, 2019 02:44
Partial Application in Java
import java.util.function.Function;
import static java.lang.String.format;
class SamplePartialApplication {
public static void main(String[] args) {
Fx2<Integer, Integer, Integer> add = (x, y) -> x + y;
System.out.println(format("Fully applied function of 2 arity result: %s", add.apply(2, 3)));
@ayago
ayago / HigherOrderFunctions.java
Created July 25, 2019 09:30
Higher order Functions in Java
import java.util.function.Function;
import static java.lang.String.format;
class HigherOrderFunctions {
public static void main(String[] args) {
Function<Integer, Integer> addOne = describeOperationFor(1);
Function<Integer, Integer> multiplyOne = a -> a * 1;
@ayago
ayago / SampleCurrying.java
Last active July 26, 2019 02:36
Currying in Java
import java.util.function.Function;
import static java.lang.String.format;
class SampleCurrying {
public static void main(String[] args) {
Fx2<Integer, Integer, Integer> add = (x, y) -> x + y;
System.out.println(format("Non curried add function of 2 arity result: %s", add.apply(2, 3)));
@ayago
ayago / SampleFolding.java
Created July 26, 2019 03:02
Folding in Java
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static java.lang.String.format;
import static java.util.Arrays.asList;
class SampleFolding {
@ayago
ayago / SampleLazyEvaluation.java
Created July 26, 2019 03:12
Lazy evaluation of function in Java
import java.math.BigDecimal;
import java.util.function.Function;
import static java.lang.String.format;
class SampleLazyEvaluation {
public static void main(String[] args) {
Function<String, BigDecimal> asBigDecimal = BigDecimal::new;
@ayago
ayago / SampleTuples.java
Created July 26, 2019 03:21
Tuples in Java
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.math.BigDecimal;
import java.util.function.Function;
import static java.lang.String.format;
class SampleTuples {
@ayago
ayago / Result.java
Created July 26, 2019 04:40
Handling exception side effect in Java
import java.util.List;
import java.util.function.Function;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toList;
/**
* A Monad like construct (e.g. {@code Optional}) that handles
* whether the operation is successful or not
*/
@ayago
ayago / Reader.java
Created July 26, 2019 04:42
Passing common variables in Java
import java.util.function.Function;
/**
* AKA function monad
* @param <R> values to be passed
* @param <A> resulting value upon application of instance of R
*/
public final class Reader<R, A> {
private final Function<R, A> g;