diff --git a/pom.xml b/pom.xml
index cc299ae..62456e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,8 +13,8 @@
org.apache.maven.plugins
maven-compiler-plugin
- 16
- 16
+ 17
+ 17
@@ -26,7 +26,7 @@
31.0.1-jre
3.21.0
5.8.1
- 2.8.8
+ 2.8.9
2.11.0
diff --git a/src/test/java/com/amigoscode/beans/Car.java b/src/main/java/com/amigoscode/beans/Car.java
similarity index 100%
rename from src/test/java/com/amigoscode/beans/Car.java
rename to src/main/java/com/amigoscode/beans/Car.java
diff --git a/src/test/java/com/amigoscode/beans/Person.java b/src/main/java/com/amigoscode/beans/Person.java
similarity index 100%
rename from src/test/java/com/amigoscode/beans/Person.java
rename to src/main/java/com/amigoscode/beans/Person.java
diff --git a/src/test/java/com/amigoscode/beans/PersonDTO.java b/src/main/java/com/amigoscode/beans/PersonDTO.java
similarity index 100%
rename from src/test/java/com/amigoscode/beans/PersonDTO.java
rename to src/main/java/com/amigoscode/beans/PersonDTO.java
diff --git a/src/main/java/com/amigoscode/examples/Filtering.java b/src/main/java/com/amigoscode/examples/Filtering.java
new file mode 100644
index 0000000..7dfdad0
--- /dev/null
+++ b/src/main/java/com/amigoscode/examples/Filtering.java
@@ -0,0 +1,24 @@
+package com.amigoscode.examples;
+
+import com.amigoscode.beans.Car;
+
+import java.util.List;
+import java.util.function.Predicate;
+
+class Filtering {
+
+ private final Predicate price = car -> car.getPrice() < 20_000.00;
+ private final Predicate color = car -> car.getColor().equals("Yellow");
+ private final List cars;
+
+ Filtering(List cars) {
+ this.cars = cars;
+ }
+
+ List getYellowCarsUnder20k() {
+ return cars.stream()
+ .filter(price)
+ .filter(color)
+ .toList();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/amigoscode/examples/GettingStarted.java b/src/main/java/com/amigoscode/examples/GettingStarted.java
new file mode 100644
index 0000000..0d8cbb3
--- /dev/null
+++ b/src/main/java/com/amigoscode/examples/GettingStarted.java
@@ -0,0 +1,38 @@
+package com.amigoscode.examples;
+
+import com.amigoscode.beans.Person;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class GettingStarted {
+
+ private final List people;
+
+ GettingStarted(List people) {
+ this.people = people;
+ }
+
+ List imperativeApproach() {
+ var youngPeople = new ArrayList();
+ var limit = 10;
+ var counter = 0;
+ for (Person person : people) {
+ if (person.getAge() <= 18) {
+ youngPeople.add(person);
+ counter++;
+ }
+ if (counter == limit) {
+ break;
+ }
+ }
+ return youngPeople;
+ }
+
+ List declarativeApproachUsingStreams() {
+ return people.stream()
+ .filter(person -> person.getAge() <= 18)
+ .limit(10)
+ .toList();
+ }
+}
diff --git a/src/test/java/com/amigoscode/examples/Filtering.java b/src/test/java/com/amigoscode/examples/FilteringTest.java
similarity index 51%
rename from src/test/java/com/amigoscode/examples/Filtering.java
rename to src/test/java/com/amigoscode/examples/FilteringTest.java
index 0037437..7c0fc2e 100644
--- a/src/test/java/com/amigoscode/examples/Filtering.java
+++ b/src/test/java/com/amigoscode/examples/FilteringTest.java
@@ -1,27 +1,29 @@
package com.amigoscode.examples;
-import com.amigoscode.beans.Car;
-import com.amigoscode.beans.Person;
import com.amigoscode.mockdata.MockData;
import org.junit.jupiter.api.Test;
-import java.util.Arrays;
-import java.util.List;
-import java.util.OptionalInt;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
-public class Filtering {
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+class FilteringTest {
@Test
- public void filter() throws Exception {
- List cars = MockData.getCars();
+ void get_all_yellow_cars_under_20k() throws Exception {
+ var cars = MockData.getCars();
+ var filtering = new Filtering(cars);
+
+ var carsUnder20k = filtering.getYellowCarsUnder20k();
+
+ assertThat(carsUnder20k.size()).isEqualTo(9);
+ carsUnder20k.forEach(car ->
+ assertThat(car.getPrice()).isLessThan(20_000.00));
}
@Test
- public void dropWhile() throws Exception {
- System.out.println("using filter");
+ void dropWhile() throws Exception {
+ System.out.println("using filtering");
Stream.of(2, 4, 6, 8, 9, 10, 12).filter(n -> n % 2 == 0)
.forEach(n -> System.out.print(n + " "));
System.out.println();
@@ -29,9 +31,9 @@ public void dropWhile() throws Exception {
}
@Test
- public void takeWhile() throws Exception {
- // using filter
- System.out.println("using filter");
+ void takeWhile() throws Exception {
+ // using filtering
+ System.out.println("using filtering");
Stream.of(2, 4, 6, 8, 9, 10, 12).filter(n -> n % 2 == 0)
.forEach(n -> System.out.print(n + " "));
@@ -40,22 +42,22 @@ public void takeWhile() throws Exception {
}
@Test
- public void findFirst() throws Exception {
+ void findFirst() throws Exception {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
}
@Test
- public void findAny() throws Exception {
+ void findAny() throws Exception {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10};
}
@Test
- public void allMatch() throws Exception {
+ void allMatch() throws Exception {
int[] even = {2, 4, 6, 8, 10};
}
@Test
- public void anyMatch() throws Exception {
+ void anyMatch() throws Exception {
int[] evenAndOneOdd = {2, 4, 6, 8, 10, 11};
}
diff --git a/src/test/java/com/amigoscode/examples/GettingStarted.java b/src/test/java/com/amigoscode/examples/GettingStarted.java
deleted file mode 100644
index 94a5f49..0000000
--- a/src/test/java/com/amigoscode/examples/GettingStarted.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.amigoscode.examples;
-
-import com.amigoscode.beans.Person;
-import com.amigoscode.mockdata.MockData;
-import org.junit.jupiter.api.Test;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-
-public class GettingStarted {
-
- @Test
- public void imperativeApproach() throws IOException {
- // 1. Find people aged less or equal 18
- // 2. Then change implementation to find first 10 people
- List people = MockData.getPeople();
- }
-
- @Test
- public void declarativeApproachUsingStreams() throws Exception {
- List people = MockData.getPeople();
- }
-}
diff --git a/src/test/java/com/amigoscode/examples/GettingStartedTest.java b/src/test/java/com/amigoscode/examples/GettingStartedTest.java
new file mode 100644
index 0000000..0f3555e
--- /dev/null
+++ b/src/test/java/com/amigoscode/examples/GettingStartedTest.java
@@ -0,0 +1,56 @@
+package com.amigoscode.examples;
+
+import com.amigoscode.beans.Person;
+import com.amigoscode.mockdata.MockData;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.assertj.core.api.AssertionsForClassTypes.fail;
+
+
+class GettingStartedTest {
+
+ private static final String FAILED_TO_FETCH_MOCK_DATA_FOR_THE_TEST = "Failed to fetch mock data for the test";
+ private GettingStarted gettingStarted;
+ private List people;
+
+ @BeforeEach
+ void setup() {
+ try {
+ people = MockData.getPeople();
+ } catch (IOException e) {
+ fail(FAILED_TO_FETCH_MOCK_DATA_FOR_THE_TEST);
+ }
+ gettingStarted = new GettingStarted(people);
+ }
+
+ @Test
+ void imperative_approach() {
+ // 1. Find people aged less or equal 18
+ // 2. Then change implementation to find first 10 people
+
+ var youngPeople = gettingStarted.imperativeApproach();
+
+ assertThat(youngPeople.size()).isEqualTo(10);
+ for (Person person : youngPeople) {
+ assertThat(person.getAge()).isLessThanOrEqualTo(18);
+ }
+ }
+
+ @Test
+ void declarativeApproachUsingStreams() {
+ // 1. Find people aged less or equal 18
+ // 2. Then change implementation to find first 10 people
+
+ var youngPeople = gettingStarted.declarativeApproachUsingStreams();
+
+ assertThat(youngPeople.size()).isEqualTo(10);
+ for (Person person : youngPeople) {
+ assertThat(person.getAge()).isLessThanOrEqualTo(18);
+ }
+ }
+}
diff --git a/src/test/java/com/amigoscode/examples/TransformationsMapAndReduce.java b/src/test/java/com/amigoscode/examples/TransformationsMapAndReduce.java
deleted file mode 100644
index 4d6b267..0000000
--- a/src/test/java/com/amigoscode/examples/TransformationsMapAndReduce.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.amigoscode.examples;
-
-import com.amigoscode.beans.Car;
-import com.amigoscode.beans.Person;
-import com.amigoscode.beans.PersonDTO;
-import com.amigoscode.mockdata.MockData;
-import org.junit.jupiter.api.Test;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-public class TransformationsMapAndReduce {
-
- @Test
- void yourFirstTransformationWithMap() throws IOException {
- List people = MockData.getPeople();
- }
-
- @Test
- void mapToDoubleAndFindAverageCarPrice() throws IOException {
- List cars = MockData.getCars();
- }
-
- @Test
- public void reduce() {
- int[] integers = {1, 2, 3, 4, 99, 100, 121, 1302, 199};
- }
-}
-
diff --git a/src/test/java/com/amigoscode/examples/TransformationsMapAndReduceTest.java b/src/test/java/com/amigoscode/examples/TransformationsMapAndReduceTest.java
new file mode 100644
index 0000000..6d0783a
--- /dev/null
+++ b/src/test/java/com/amigoscode/examples/TransformationsMapAndReduceTest.java
@@ -0,0 +1,56 @@
+package com.amigoscode.examples;
+
+import com.amigoscode.beans.Car;
+import com.amigoscode.beans.Person;
+import com.amigoscode.beans.PersonDTO;
+import com.amigoscode.mockdata.MockData;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+class TransformationsMapAndReduceTest {
+
+ @Test
+ void yourFirstTransformationWithMap() throws IOException {
+ List people = MockData.getPeople();
+
+ var peopleDTos = people.stream()
+ .map(PersonDTO::map)
+ .toList();
+
+ assertThat(people.size()).isEqualTo(peopleDTos.size());
+ peopleDTos.forEach(personDTO -> {
+ long count = people.stream()
+ .filter(person -> person.getId() == personDTO.getId())
+ .count();
+ assertThat(count).isEqualTo(1);
+ });
+ }
+
+ @Test
+ void mapToDoubleAndFindAverageCarPrice() throws IOException {
+ var cars = MockData.getCars();
+
+ double averageCarPrice = cars.stream()
+ .mapToDouble(Car::getPrice)
+ .average()
+ .getAsDouble();
+
+ assertThat(averageCarPrice).isEqualTo(52693.19979);
+ }
+
+ @Test
+ void reduce() {
+ int[] integers = {1, 2, 3, 4, 99, 100, 121, 1302, 199};
+
+ var reduced = Arrays.stream(integers)
+ .reduce(0, Integer::sum);
+
+ assertThat(reduced).isEqualTo(1831);
+ }
+}
+
diff --git a/src/test/java/com/amigoscode/examples/WorkingWithStreams.java b/src/test/java/com/amigoscode/examples/WorkingWithStreams.java
deleted file mode 100644
index 0818b7c..0000000
--- a/src/test/java/com/amigoscode/examples/WorkingWithStreams.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.amigoscode.examples;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-public class WorkingWithStreams {
-
- @Test
- void steams() {
- List names = List.of("Amigoscode", "Alex", "Zara");
- }
-}
diff --git a/src/test/java/com/amigoscode/examples/WorkingWithStreamsTest.java b/src/test/java/com/amigoscode/examples/WorkingWithStreamsTest.java
new file mode 100644
index 0000000..4ae31e2
--- /dev/null
+++ b/src/test/java/com/amigoscode/examples/WorkingWithStreamsTest.java
@@ -0,0 +1,23 @@
+package com.amigoscode.examples;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+class WorkingWithStreamsTest {
+
+ @Test
+ void count_items_on_stream() {
+ var names = List.of("Amigoscode", "Alex", "Zara", "Sarah", "Alan");
+ var stream = names.stream();
+
+ var count = stream
+ .filter(name -> name.charAt(0) == 'A')
+ .limit(2)
+ .count();
+
+ assertThat(count).isEqualTo(2);
+ }
+}