Skip to content

Instantly share code, notes, and snippets.

View ayago's full-sized avatar

Adrian Yago ayago

View GitHub Profile
@ayago
ayago / GameDataService.java
Last active May 17, 2023 05:12
Java Demonstration on how to perform map reduce from a file to create an aggregation/report
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Stream;
public class GameDataService{
private final GameDataRepository gameDataRepository;
@ayago
ayago / BindNestedStreamSample.java
Last active August 1, 2019 08:30
Bind/Flat map nested stream
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.lang.String.format;
import static java.util.Arrays.asList;
@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;
@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 / 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 / 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 / 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 / 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 / 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 / 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)));