├── .idea ├── .gitignore ├── compiler.xml ├── misc.xml └── uiDesigner.xml ├── pom.xml ├── src └── main │ └── java │ ├── .DS_Store │ ├── combinatorpatttern │ ├── Customer.java │ ├── CustomerRegistrationValidator.java │ ├── CustomerValidatorService.java │ └── Main.java │ ├── finalsection │ ├── Callbacks.java │ └── Lambdas.java │ ├── functionalinterface │ ├── _Consumer.java │ ├── _Function.java │ ├── _Predicate.java │ └── _Supplier.java │ ├── imperative │ └── Main.java │ ├── optionals │ └── Main.java │ └── streams │ └── _Stream.java └── target └── classes ├── META-INF └── javafunctional.kotlin_module ├── combinatorpatttern ├── Customer.class ├── CustomerRegistrationValidator$ValidationResult.class ├── CustomerRegistrationValidator.class ├── CustomerValidatorService.class └── Main.class ├── finalsection ├── Callbacks.class └── Lambdas.class ├── functionalinterface ├── _Consumer$Customer.class ├── _Consumer.class ├── _Function.class ├── _Predicate.class └── _Supplier.class ├── imperative ├── Main$Gender.class ├── Main$Person.class └── Main.class ├── optionals └── Main.class └── streams ├── _Stream$Gender.class ├── _Stream$Person.class └── _Stream.class /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.amigoscode 8 | javafunctional 9 | 1.0-SNAPSHOT 10 | 11 | -------------------------------------------------------------------------------- /src/main/java/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/src/main/java/.DS_Store -------------------------------------------------------------------------------- /src/main/java/combinatorpatttern/Customer.java: -------------------------------------------------------------------------------- 1 | package combinatorpatttern; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class Customer { 6 | 7 | private final String name; 8 | private final String email; 9 | private final String phoneNumber; 10 | private final LocalDate dob; 11 | 12 | public Customer(String name, String email, String phoneNumber, LocalDate dob) { 13 | this.name = name; 14 | this.email = email; 15 | this.phoneNumber = phoneNumber; 16 | this.dob = dob; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public String getEmail() { 24 | return email; 25 | } 26 | 27 | public String getPhoneNumber() { 28 | return phoneNumber; 29 | } 30 | 31 | public LocalDate getDob() { 32 | return dob; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/combinatorpatttern/CustomerRegistrationValidator.java: -------------------------------------------------------------------------------- 1 | package combinatorpatttern; 2 | 3 | import java.time.LocalDate; 4 | import java.time.Period; 5 | import java.util.function.Function; 6 | 7 | import static combinatorpatttern.CustomerRegistrationValidator.*; 8 | import static combinatorpatttern.CustomerRegistrationValidator.ValidationResult.*; 9 | 10 | public interface CustomerRegistrationValidator 11 | extends Function { 12 | 13 | static CustomerRegistrationValidator isEmailValid() { 14 | return customer -> { 15 | System.out.println("running email validation"); 16 | return customer.getEmail().contains("@") ? 17 | SUCCESS : EMAIL_NOT_VALID; 18 | }; 19 | } 20 | 21 | static CustomerRegistrationValidator isPhoneNumberValid() { 22 | return customer -> customer.getPhoneNumber().startsWith("+0") ? 23 | SUCCESS : PHONE_NUMBER_NOT_VALID; 24 | } 25 | 26 | static CustomerRegistrationValidator isAnAdult() { 27 | return customer -> 28 | Period.between(customer.getDob(), LocalDate.now()).getYears() > 16 ? 29 | SUCCESS : IS_NOT_AN_ADULT; 30 | } 31 | 32 | default CustomerRegistrationValidator and (CustomerRegistrationValidator other) { 33 | return customer -> { 34 | ValidationResult result = this.apply(customer); 35 | return result.equals(SUCCESS) ? other.apply(customer) : result; 36 | }; 37 | } 38 | 39 | enum ValidationResult { 40 | SUCCESS, 41 | PHONE_NUMBER_NOT_VALID, 42 | EMAIL_NOT_VALID, 43 | IS_NOT_AN_ADULT 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/combinatorpatttern/CustomerValidatorService.java: -------------------------------------------------------------------------------- 1 | package combinatorpatttern; 2 | 3 | import java.time.LocalDate; 4 | import java.time.Period; 5 | 6 | public class CustomerValidatorService { 7 | 8 | private boolean isEmailValid(String email) { 9 | return email.contains("@"); 10 | } 11 | 12 | private boolean isPhoneNumberValid(String phoneNumber) { 13 | return phoneNumber.startsWith("+0"); 14 | } 15 | 16 | private boolean isAdult(LocalDate dob) { 17 | return Period.between(dob, LocalDate.now()).getYears() > 16; 18 | } 19 | 20 | public boolean isValid(Customer customer) { 21 | return isEmailValid(customer.getEmail()) && 22 | isPhoneNumberValid(customer.getPhoneNumber()) && 23 | isAdult(customer.getDob()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/combinatorpatttern/Main.java: -------------------------------------------------------------------------------- 1 | package combinatorpatttern; 2 | 3 | import java.time.LocalDate; 4 | 5 | import static combinatorpatttern.CustomerRegistrationValidator.*; 6 | 7 | public class Main { 8 | 9 | public static void main(String[] args) { 10 | Customer customer = new Customer( 11 | "Alice", 12 | "alice@gmail.com", 13 | "+0898787879878", 14 | LocalDate.of(2015, 1,1) 15 | ); 16 | 17 | // System.out.println(new CustomerValidatorService().isValid(customer)); 18 | 19 | // if valid we can store customer in db 20 | 21 | // Using combinator pattern 22 | ValidationResult result = isEmailValid() 23 | .and(isPhoneNumberValid()) 24 | .and(isAnAdult()) 25 | .apply(customer); 26 | 27 | System.out.println(result); 28 | 29 | if (result != ValidationResult.SUCCESS) { 30 | throw new IllegalStateException(result.name()); 31 | } 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/finalsection/Callbacks.java: -------------------------------------------------------------------------------- 1 | package finalsection; 2 | 3 | import java.util.function.Consumer; 4 | 5 | public class Callbacks { 6 | public static void main(String[] args) { 7 | 8 | hello("John", null, value -> { 9 | System.out.println("no lastName provided for " + value); 10 | }); 11 | 12 | hello2("John", 13 | null, 14 | () -> System.out.println("no lastName provided")); 15 | 16 | } 17 | 18 | static void hello(String firstName, String lastName, Consumer callback) { 19 | System.out.println(firstName); 20 | if (lastName != null) { 21 | System.out.println(lastName); 22 | } else { 23 | callback.accept(firstName); 24 | } 25 | } 26 | 27 | static void hello2(String firstName, String lastName, Runnable callback) { 28 | System.out.println(firstName); 29 | if (lastName != null) { 30 | System.out.println(lastName); 31 | } else { 32 | callback.run(); 33 | } 34 | } 35 | 36 | // function hello(firstName, lastName, callback) { 37 | // console.log(firstName); 38 | // if (lastName) { 39 | // console.log(lastName) 40 | // } else { 41 | // callback(); 42 | // } 43 | // } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/finalsection/Lambdas.java: -------------------------------------------------------------------------------- 1 | package finalsection; 2 | 3 | import java.util.function.BiFunction; 4 | import java.util.function.Consumer; 5 | import java.util.function.Function; 6 | 7 | public class Lambdas { 8 | 9 | public static void main(String[] args) { 10 | 11 | Integer number = null; 12 | int couter = 0; 13 | 14 | BiFunction upperCaseName = (name, age) -> { 15 | int counter = 0; 16 | // logic 17 | if (name.isBlank()) throw new IllegalArgumentException(""); 18 | System.out.println(age); 19 | return name.toUpperCase(); 20 | }; 21 | 22 | System.out.println(upperCaseName.apply("Alex", null)); 23 | 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/functionalinterface/_Consumer.java: -------------------------------------------------------------------------------- 1 | package functionalinterface; 2 | 3 | import java.util.function.BiConsumer; 4 | import java.util.function.Consumer; 5 | 6 | public class _Consumer { 7 | 8 | public static void main(String[] args) { 9 | // Normal java function 10 | Customer maria = new Customer("Maria", "99999"); 11 | greetCustomer(maria); 12 | greetCustomerV2(maria, false); 13 | 14 | // Consumer Functional interface 15 | greetCustomerConsumer.accept(maria); 16 | 17 | greetCustomerConsumerV2.accept(maria, false); 18 | } 19 | 20 | static BiConsumer greetCustomerConsumerV2 = (customer, showPhoneNumber) -> 21 | System.out.println("Hello " + customer.customerName + 22 | ", thanks for registering phone number " 23 | + (showPhoneNumber ? customer.customerPhoneNumber : "*********")); 24 | 25 | static Consumer greetCustomerConsumer = customer -> 26 | System.out.println("Hello " + customer.customerName + 27 | ", thanks for registering phone number " 28 | + customer.customerPhoneNumber); 29 | 30 | static void greetCustomer(Customer customer) { 31 | System.out.println("Hello " + customer.customerName + 32 | ", thanks for registering phone number " 33 | + customer.customerPhoneNumber); 34 | } 35 | 36 | static void greetCustomerV2(Customer customer, boolean showPhoneNumber) { 37 | System.out.println("Hello " + customer.customerName + 38 | ", thanks for registering phone number " 39 | + (showPhoneNumber ? customer.customerPhoneNumber : "*********")); 40 | } 41 | 42 | static class Customer { 43 | private final String customerName; 44 | private final String customerPhoneNumber; 45 | 46 | Customer(String customerName, String customerPhoneNumber) { 47 | this.customerName = customerName; 48 | this.customerPhoneNumber = customerPhoneNumber; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/functionalinterface/_Function.java: -------------------------------------------------------------------------------- 1 | package functionalinterface; 2 | 3 | import java.util.function.BiFunction; 4 | import java.util.function.Function; 5 | 6 | public class _Function { 7 | 8 | public static void main(String[] args) { 9 | // Function takes 1 argument and produces 1 result 10 | int increment = incrementByOne(1); 11 | System.out.println(increment); 12 | 13 | int increment2 = incrementByOneFunction.apply(1); 14 | System.out.println(increment2); 15 | 16 | int multiply = multiplyBy10Function.apply(increment2); 17 | System.out.println(multiply); 18 | 19 | Function addBy1AndThenMultiplyBy10 = 20 | incrementByOneFunction.andThen(multiplyBy10Function); 21 | System.out.println(addBy1AndThenMultiplyBy10.apply(4)); 22 | 23 | // BiFunction takes 2 argument and produces 1 result 24 | System.out.println( 25 | incrementByOneAndMultiply(4, 100) 26 | ); 27 | 28 | System.out.println( 29 | incrementByOneAndMultiplyBiFunction.apply(4, 100) 30 | ); 31 | 32 | } 33 | 34 | static Function incrementByOneFunction = 35 | number -> number + 1; 36 | 37 | static Function multiplyBy10Function = number -> number * 10; 38 | 39 | static int incrementByOne(int number) { 40 | return number + 1; 41 | } 42 | 43 | static BiFunction incrementByOneAndMultiplyBiFunction = 44 | (numberToIncrementByOne, numberToMultiplyBy) 45 | -> (numberToIncrementByOne + 1) * numberToMultiplyBy; 46 | 47 | static int incrementByOneAndMultiply(int number, int numToMultiplyBy) { 48 | return (number + 1) * numToMultiplyBy; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/functionalinterface/_Predicate.java: -------------------------------------------------------------------------------- 1 | package functionalinterface; 2 | 3 | import java.util.function.Predicate; 4 | 5 | public class _Predicate { 6 | 7 | public static void main(String[] args) { 8 | 9 | System.out.println("Without predicate"); 10 | System.out.println(isPhoneNumberValid("07000000000")); 11 | System.out.println(isPhoneNumberValid("0700000000")); 12 | System.out.println(isPhoneNumberValid("09009877300")); 13 | 14 | System.out.println("With predicate"); 15 | System.out.println(isPhoneNumberValidPredicate.test("07000000000")); 16 | System.out.println(isPhoneNumberValidPredicate.test("0700000000")); 17 | System.out.println(isPhoneNumberValidPredicate.test("09009877300")); 18 | 19 | System.out.println( 20 | "Is phone number valid and contains number 3 = " + 21 | isPhoneNumberValidPredicate.and(containsNumber3).test("09009877300") 22 | ); 23 | 24 | System.out.println( 25 | "Is phone number valid and contains number 3 = " + 26 | isPhoneNumberValidPredicate.or(containsNumber3).test("07000000000") 27 | ); 28 | 29 | } 30 | 31 | static boolean isPhoneNumberValid(String phoneNumber) { 32 | return phoneNumber.startsWith("07") && phoneNumber.length() == 11; 33 | } 34 | 35 | static Predicate isPhoneNumberValidPredicate = phoneNumber -> 36 | phoneNumber.startsWith("07") && phoneNumber.length() == 11; 37 | 38 | static Predicate containsNumber3 = phoneNumber -> 39 | phoneNumber.contains("3"); 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/functionalinterface/_Supplier.java: -------------------------------------------------------------------------------- 1 | package functionalinterface; 2 | 3 | import java.util.List; 4 | import java.util.function.Supplier; 5 | 6 | public class _Supplier { 7 | 8 | public static void main(String[] args) { 9 | System.out.println(getDBConnectionUrl()); 10 | System.out.println(getDBConnectionUrlsSupplier.get()); 11 | } 12 | 13 | static String getDBConnectionUrl() { 14 | return "jdbc://localhost:5432/users"; 15 | } 16 | 17 | static Supplier> getDBConnectionUrlsSupplier = () 18 | -> List.of( 19 | "jdbc://localhost:5432/users", 20 | "jdbc://localhost:5432/customer"); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/imperative/Main.java: -------------------------------------------------------------------------------- 1 | package imperative; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.function.Predicate; 6 | import java.util.stream.Collectors; 7 | 8 | import static imperative.Main.Gender.*; 9 | 10 | public class Main { 11 | public static void main(String[] args) { 12 | List people = List.of( 13 | new Person("John", MALE), 14 | new Person("Maria", FEMALE), 15 | new Person("Aisha", FEMALE), 16 | new Person("Alex", MALE), 17 | new Person("Alice", FEMALE) 18 | ); 19 | 20 | System.out.println("// Imperative approach"); 21 | // Imperative approach 22 | 23 | List females = new ArrayList<>(); 24 | 25 | for (Person person : people) { 26 | if (FEMALE.equals(person.gender)) { 27 | females.add(person); 28 | } 29 | } 30 | 31 | for (Person female : females) { 32 | System.out.println(female); 33 | } 34 | 35 | System.out.println("// Declarative approach"); 36 | // Declarative approach 37 | 38 | Predicate personPredicate = person -> FEMALE.equals(person.gender); 39 | 40 | List females2 = people.stream() 41 | .filter(personPredicate) 42 | .collect(Collectors.toList()); 43 | females2.forEach(System.out::println); 44 | } 45 | 46 | static class Person { 47 | private final String name; 48 | private final Gender gender; 49 | 50 | Person(String name, Gender gender) { 51 | this.name = name; 52 | this.gender = gender; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return "Person{" + 58 | "name='" + name + '\'' + 59 | ", gender=" + gender + 60 | '}'; 61 | } 62 | } 63 | 64 | enum Gender { 65 | MALE, FEMALE 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/optionals/Main.java: -------------------------------------------------------------------------------- 1 | package optionals; 2 | 3 | import java.util.Optional; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | 8 | Optional.ofNullable(null) 9 | .ifPresentOrElse( 10 | email -> System.out.println("Sending email to " + email), 11 | () -> System.out.println("Cannot send email")); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/streams/_Stream.java: -------------------------------------------------------------------------------- 1 | package streams; 2 | 3 | import java.util.List; 4 | import java.util.Set; 5 | import java.util.function.Function; 6 | import java.util.function.IntConsumer; 7 | import java.util.function.Predicate; 8 | import java.util.function.ToIntFunction; 9 | import java.util.stream.Collectors; 10 | 11 | import static streams._Stream.Gender.*; 12 | 13 | public class _Stream { 14 | 15 | public static void main(String[] args) { 16 | 17 | List people = List.of( 18 | new Person("John", MALE), 19 | new Person("Maria", FEMALE), 20 | new Person("Aisha", FEMALE), 21 | new Person("Alex", MALE), 22 | new Person("Alice", FEMALE), 23 | new Person("Bob", PREFER_NOT_TO_SAY) 24 | ); 25 | 26 | people.stream() 27 | .map(person -> person.name) 28 | .mapToInt(String::length) 29 | .forEach(System.out::println); 30 | 31 | } 32 | 33 | static class Person { 34 | private final String name; 35 | private final Gender gender; 36 | 37 | Person(String name, Gender gender) { 38 | this.name = name; 39 | this.gender = gender; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return "Person{" + 45 | "name='" + name + '\'' + 46 | ", gender=" + gender + 47 | '}'; 48 | } 49 | } 50 | 51 | enum Gender { 52 | MALE, FEMALE, PREFER_NOT_TO_SAY 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /target/classes/META-INF/javafunctional.kotlin_module: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /target/classes/combinatorpatttern/Customer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/combinatorpatttern/Customer.class -------------------------------------------------------------------------------- /target/classes/combinatorpatttern/CustomerRegistrationValidator$ValidationResult.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/combinatorpatttern/CustomerRegistrationValidator$ValidationResult.class -------------------------------------------------------------------------------- /target/classes/combinatorpatttern/CustomerRegistrationValidator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/combinatorpatttern/CustomerRegistrationValidator.class -------------------------------------------------------------------------------- /target/classes/combinatorpatttern/CustomerValidatorService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/combinatorpatttern/CustomerValidatorService.class -------------------------------------------------------------------------------- /target/classes/combinatorpatttern/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/combinatorpatttern/Main.class -------------------------------------------------------------------------------- /target/classes/finalsection/Callbacks.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/finalsection/Callbacks.class -------------------------------------------------------------------------------- /target/classes/finalsection/Lambdas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/finalsection/Lambdas.class -------------------------------------------------------------------------------- /target/classes/functionalinterface/_Consumer$Customer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/functionalinterface/_Consumer$Customer.class -------------------------------------------------------------------------------- /target/classes/functionalinterface/_Consumer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/functionalinterface/_Consumer.class -------------------------------------------------------------------------------- /target/classes/functionalinterface/_Function.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/functionalinterface/_Function.class -------------------------------------------------------------------------------- /target/classes/functionalinterface/_Predicate.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/functionalinterface/_Predicate.class -------------------------------------------------------------------------------- /target/classes/functionalinterface/_Supplier.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/functionalinterface/_Supplier.class -------------------------------------------------------------------------------- /target/classes/imperative/Main$Gender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/imperative/Main$Gender.class -------------------------------------------------------------------------------- /target/classes/imperative/Main$Person.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/imperative/Main$Person.class -------------------------------------------------------------------------------- /target/classes/imperative/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/imperative/Main.class -------------------------------------------------------------------------------- /target/classes/optionals/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/optionals/Main.class -------------------------------------------------------------------------------- /target/classes/streams/_Stream$Gender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/streams/_Stream$Gender.class -------------------------------------------------------------------------------- /target/classes/streams/_Stream$Person.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/streams/_Stream$Person.class -------------------------------------------------------------------------------- /target/classes/streams/_Stream.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amigoscode/java-functional-programming/07588d314e8730d1357dee565d4b4455ab4ea0c1/target/classes/streams/_Stream.class --------------------------------------------------------------------------------