From 7ce023525b1ecd63837081efcf35486a83bfe9f4 Mon Sep 17 00:00:00 2001 From: Taras Boychuk Date: Sat, 1 Oct 2022 10:06:44 +0300 Subject: [PATCH 1/3] * Type Parameterisation Demo * Functional Programming Task --- lesson-demo/pom.xml | 6 ++++ .../src/main/java/com/bobocode/DemoApp.java | 13 +++++++ .../FunctionalProgrammingDemoApp.java | 26 ++++++++++++++ .../main/java/com/bobocode/SpringDemoApp.java | 34 +++++++++++++++++++ .../bobocode/service/ConferenceService.java | 17 ++++++++++ .../java/com/bobocode/service/MadService.java | 11 ++++++ .../com/bobocode/service/TalkingService.java | 5 +++ .../service/impl/HelloTalkingService.java | 12 +++++++ .../service/impl/HeyTalkingService.java | 12 +++++++ 9 files changed, 136 insertions(+) create mode 100644 lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java create mode 100644 lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java create mode 100644 lesson-demo/src/main/java/com/bobocode/service/ConferenceService.java create mode 100644 lesson-demo/src/main/java/com/bobocode/service/MadService.java create mode 100644 lesson-demo/src/main/java/com/bobocode/service/TalkingService.java create mode 100644 lesson-demo/src/main/java/com/bobocode/service/impl/HelloTalkingService.java create mode 100644 lesson-demo/src/main/java/com/bobocode/service/impl/HeyTalkingService.java diff --git a/lesson-demo/pom.xml b/lesson-demo/pom.xml index 0bd7ccdcf..a51f85952 100644 --- a/lesson-demo/pom.xml +++ b/lesson-demo/pom.xml @@ -17,6 +17,12 @@ java-fundamentals-util 1.0-SNAPSHOT + + + org.springframework + spring-context + 5.3.22 + \ No newline at end of file diff --git a/lesson-demo/src/main/java/com/bobocode/DemoApp.java b/lesson-demo/src/main/java/com/bobocode/DemoApp.java index f27749017..fb403ca2f 100644 --- a/lesson-demo/src/main/java/com/bobocode/DemoApp.java +++ b/lesson-demo/src/main/java/com/bobocode/DemoApp.java @@ -1,6 +1,19 @@ package com.bobocode; +import java.util.Arrays; +import java.util.List; + public class DemoApp { public static void main(String[] args) { + List wordList = List.of("Hello", "Hey"); + System.out.println(wordList.getClass().getComponentType()); // 👈 + + String[] wordArray = wordList.toArray(new String[1]); + System.out.println(wordArray.getClass().getComponentType()); } + +// public static T[] createGenericArray(int size) { +// return new T[size]; +// } + } diff --git a/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java b/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java new file mode 100644 index 000000000..4822b784f --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java @@ -0,0 +1,26 @@ +package com.bobocode; + +import java.util.Stack; +import java.util.stream.Collector; +import java.util.stream.Stream; + +public class FunctionalProgrammingDemoApp { + public static void main(String[] args) { + Stack wordsStack = Stream.of("Hello", "Hey") + .collect(toStack()); + + while (!wordsStack.isEmpty()) { + System.out.println(wordsStack.pop()); + } + + } + + private static Collector> toStack() { + return null; + // todo: + // return Collector.of( + // + //); + } + +} diff --git a/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java b/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java new file mode 100644 index 000000000..ff37db2f5 --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java @@ -0,0 +1,34 @@ +package com.bobocode; + +import com.bobocode.service.ConferenceService; +import com.bobocode.service.TalkingService; +import lombok.SneakyThrows; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class SpringDemoApp { + @SneakyThrows + public static void main(String[] args) { + + var context = new AnnotationConfigApplicationContext("com.bobocode.service"); + var conferenceService = context.getBean(ConferenceService.class); + // how spring works + var field = conferenceService.getClass().getDeclaredField("talkingServiceList"); + ParameterizedType genericType = (ParameterizedType) field.getGenericType(); + Type actualTypeArgument = genericType.getActualTypeArguments()[0]; + Class talkingServiceClass = Class.forName(actualTypeArgument.getTypeName()); + System.out.println(talkingServiceClass); + Map beanMaps = context.getBeansOfType(talkingServiceClass); + beanMaps.values().stream() + .map(bean -> (TalkingService)bean) + .forEach(TalkingService::talk); + + + } + +} diff --git a/lesson-demo/src/main/java/com/bobocode/service/ConferenceService.java b/lesson-demo/src/main/java/com/bobocode/service/ConferenceService.java new file mode 100644 index 000000000..6d0e85b74 --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/service/ConferenceService.java @@ -0,0 +1,17 @@ +package com.bobocode.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ConferenceService { + private final List talkingServiceList; + + public void runConference() { + talkingServiceList.forEach(TalkingService::talk); + } +} diff --git a/lesson-demo/src/main/java/com/bobocode/service/MadService.java b/lesson-demo/src/main/java/com/bobocode/service/MadService.java new file mode 100644 index 000000000..25a720afe --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/service/MadService.java @@ -0,0 +1,11 @@ +package com.bobocode.service; + +import org.springframework.stereotype.Service; + +@Service +public class MadService { + + public void talk() { + System.out.println("I am mad!"); + } +} diff --git a/lesson-demo/src/main/java/com/bobocode/service/TalkingService.java b/lesson-demo/src/main/java/com/bobocode/service/TalkingService.java new file mode 100644 index 000000000..51e53b441 --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/service/TalkingService.java @@ -0,0 +1,5 @@ +package com.bobocode.service; + +public interface TalkingService { + void talk(); +} diff --git a/lesson-demo/src/main/java/com/bobocode/service/impl/HelloTalkingService.java b/lesson-demo/src/main/java/com/bobocode/service/impl/HelloTalkingService.java new file mode 100644 index 000000000..f20ea3a98 --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/service/impl/HelloTalkingService.java @@ -0,0 +1,12 @@ +package com.bobocode.service.impl; + +import com.bobocode.service.TalkingService; +import org.springframework.stereotype.Service; + +@Service +public class HelloTalkingService implements TalkingService { + @Override + public void talk() { + System.out.println("Hello"); + } +} diff --git a/lesson-demo/src/main/java/com/bobocode/service/impl/HeyTalkingService.java b/lesson-demo/src/main/java/com/bobocode/service/impl/HeyTalkingService.java new file mode 100644 index 000000000..2e7bf4bad --- /dev/null +++ b/lesson-demo/src/main/java/com/bobocode/service/impl/HeyTalkingService.java @@ -0,0 +1,12 @@ +package com.bobocode.service.impl; + +import com.bobocode.service.TalkingService; +import org.springframework.stereotype.Service; + +@Service +public class HeyTalkingService implements TalkingService { + @Override + public void talk() { + System.out.println("Hey"); + } +} From 25997de81cfe4e4207dcf1423950e9cd400cdac8 Mon Sep 17 00:00:00 2001 From: Taras Boychuk Date: Thu, 6 Oct 2022 10:47:50 +0300 Subject: [PATCH 2/3] * Add Collector impl --- lesson-demo/src/main/java/com/bobocode/DemoApp.java | 3 +-- .../com/bobocode/FunctionalProgrammingDemoApp.java | 13 ++++++++----- .../src/main/java/com/bobocode/SpringDemoApp.java | 2 -- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lesson-demo/src/main/java/com/bobocode/DemoApp.java b/lesson-demo/src/main/java/com/bobocode/DemoApp.java index fb403ca2f..bf6bca648 100644 --- a/lesson-demo/src/main/java/com/bobocode/DemoApp.java +++ b/lesson-demo/src/main/java/com/bobocode/DemoApp.java @@ -1,6 +1,5 @@ package com.bobocode; -import java.util.Arrays; import java.util.List; public class DemoApp { @@ -13,7 +12,7 @@ public static void main(String[] args) { } // public static T[] createGenericArray(int size) { -// return new T[size]; +// return new T[size]; // it's not possible to create a generic array // } } diff --git a/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java b/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java index 4822b784f..f65e938b8 100644 --- a/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java +++ b/lesson-demo/src/main/java/com/bobocode/FunctionalProgrammingDemoApp.java @@ -16,11 +16,14 @@ public static void main(String[] args) { } private static Collector> toStack() { - return null; - // todo: - // return Collector.of( - // - //); + return Collector.of( + Stack::new, + Stack::push, + (stack1, stack2) -> { + stack2.forEach(stack1::push); + return stack1; + } + ); } } diff --git a/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java b/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java index ff37db2f5..14cca9fab 100644 --- a/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java +++ b/lesson-demo/src/main/java/com/bobocode/SpringDemoApp.java @@ -7,8 +7,6 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.List; import java.util.Map; public class SpringDemoApp { From ced5a0c58886d9fc3ef39f69c145f3097b9ea54d Mon Sep 17 00:00:00 2001 From: Dmytro Yakovenko Date: Thu, 20 Oct 2022 16:46:42 +0300 Subject: [PATCH 3/3] fix test add check for tail value --- .../java/com/bobocode/cs/LinkedQueueTest.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/2-0-data-structures-and-algorithms/2-2-3-linked-queue/src/test/java/com/bobocode/cs/LinkedQueueTest.java b/2-0-data-structures-and-algorithms/2-2-3-linked-queue/src/test/java/com/bobocode/cs/LinkedQueueTest.java index 91a6e2616..88c1a7d9d 100644 --- a/2-0-data-structures-and-algorithms/2-2-3-linked-queue/src/test/java/com/bobocode/cs/LinkedQueueTest.java +++ b/2-0-data-structures-and-algorithms/2-2-3-linked-queue/src/test/java/com/bobocode/cs/LinkedQueueTest.java @@ -62,7 +62,7 @@ void createNodeClass() { @Test @Order(2) - void chekFieldsNameInNodeClass() { + void checkFieldsNameInNodeClass() { Class innerClass = getInnerStaticNodeClass(); boolean hasElementField = hasField(innerClass, ELEMENT_FIELD); boolean hasNodeField = hasField(innerClass, NODE_FIELD); @@ -104,16 +104,19 @@ void addFillsQueueWhenItIsEmpty() { @Order(5) void addFillsQueueWhenItIsNotEmpty() { addIntElementToQueue(12); + addIntElementToQueue(13); integerQueue.add(111); int size = getInternalSize(); boolean isEmpty = isEmptyQueue(); Integer firstElement = (Integer) pollElementFromQueue(); Integer secondElement = (Integer) pollElementFromQueue(); + Integer tailValue = (Integer) getNodeValue(TAIL_FIELD); - assertThat(size).isEqualTo(2); + assertThat(size).isEqualTo(3); assertThat(isEmpty).isEqualTo(false); assertThat(firstElement).isEqualTo(12); - assertThat(secondElement).isEqualTo(111); + assertThat(secondElement).isEqualTo(13); + assertThat(tailValue).isEqualTo(111); } @Test @@ -363,4 +366,12 @@ private Field getAccessibleFieldByPredicate(Object object, Predicate pred field.setAccessible(true); return field; } + + @SneakyThrows + private Object getNodeValue(Predicate predicate) { + Object field = getAccessibleFieldByPredicate(integerQueue, predicate).get(integerQueue); + final Field value = getAccessibleFieldByPredicate(field, ELEMENT_FIELD); + value.setAccessible(true); + return value.get(field); + } }