├── .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
--------------------------------------------------------------------------------