From 6af24f0bea51333af1cb58908118c2438fc96b8b Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 12:07:14 +0200 Subject: [PATCH 1/6] Fixed gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5556663 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +.idea +target \ No newline at end of file From d75aa5cbbfe96492f5246d0993b944513ca142e4 Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 13:14:45 +0200 Subject: [PATCH 2/6] Added support for Java 16 and code cleanup. --- LambdasAndStreams/.gitignore | 4 + LambdasAndStreams/pom.xml | 24 +++++ ...amsCodePart2 => StreamsCodeDemoPart2.java} | 98 +++++++++---------- 3 files changed, 76 insertions(+), 50 deletions(-) create mode 100644 LambdasAndStreams/.gitignore create mode 100644 LambdasAndStreams/pom.xml rename LambdasAndStreams/src/main/java/{StreamsCodePart2 => StreamsCodeDemoPart2.java} (54%) diff --git a/LambdasAndStreams/.gitignore b/LambdasAndStreams/.gitignore new file mode 100644 index 0000000..bbaaba9 --- /dev/null +++ b/LambdasAndStreams/.gitignore @@ -0,0 +1,4 @@ +# Default ignored files +.idea +target +.class \ No newline at end of file diff --git a/LambdasAndStreams/pom.xml b/LambdasAndStreams/pom.xml new file mode 100644 index 0000000..b25cded --- /dev/null +++ b/LambdasAndStreams/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + org.example + Java8 + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + + \ No newline at end of file diff --git a/LambdasAndStreams/src/main/java/StreamsCodePart2 b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java similarity index 54% rename from LambdasAndStreams/src/main/java/StreamsCodePart2 rename to LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java index 0fda2ab..5943613 100644 --- a/LambdasAndStreams/src/main/java/StreamsCodePart2 +++ b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java @@ -1,5 +1,7 @@ -import java.util.*; -import java.util.function.Function; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -8,79 +10,73 @@ public class StreamsCodeDemoPart2 { public static void main(String[] args) { //1. Given a sentence, find and print the frequency of each word. - String sentence = "Java is a programming language. Java is versatile."; + String sentence = "Java is a programming language. Java is versatile. Java is fun."; - Map wordFreqMap = Arrays.stream(sentence.split("\\s+")) - .collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); + Map wordFreqMap = Arrays.stream(sentence.split("\\s+")) + .collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); - -// System.out.println(wordFreqMap); + printArgs(wordFreqMap.toString()); //2. Given a list of integers, find out all the numbers starting with 1. - List nums = Arrays.asList(12, 13, 18, 21, 90, 11); + List numList = Arrays.asList(12, 13, 18, 21, 90, 11); - List numsWithOne = nums.stream().filter( n -> String.valueOf(n).startsWith("1")).collect(Collectors.toList()); + List numbersWithOne = numList.stream() + .filter(n -> String.valueOf(n).startsWith("1")) + .toList(); -// System.out.println(numsWithOne); + printArgs(numbersWithOne.toString()); - //3. Given a list of names, group them by their first letter, and then count the number of names in each group. + // 3. Given a list of names, group them by their first letter, and then count the number of names in each group. String[] names = {"Alice", "Bob", "Charlie", "Amy", "Bill", "Anna"}; - Map namesMap = Arrays.stream(names).collect(Collectors.groupingBy(s -> s.charAt(0), Collectors.counting())); - -// System.out.println(namesMap); + Map namesMap = Arrays.stream(names) + .collect(Collectors.groupingBy(s -> s.charAt(0), Collectors.counting())); + printArgs(namesMap.toString()); // 4. Find and print duplicate numbers in an array if it contains multiple duplicates? - int[] arr = {2,4,2,3,1,5, 5,78,3,1,5}; - -// Arrays.stream(arr).boxed() -// .collect(Collectors.groupingBy(e-> e, Collectors.counting())) -// .entrySet().stream() -// //key -value - 2 (k), 2(val) -// .filter(entry -> entry.getValue() > 1) -// .map(Map.Entry::getKey) -// .forEach(System.out::println); + int[] arr = {2, 4, 2, 3, 1, 5, 5, 78, 3, 1, 5}; + Arrays.stream(arr).boxed() + .collect(Collectors.groupingBy(e -> e, Collectors.counting())) + .entrySet().stream() + //key -value - 2 (k), 2(val) + .filter(entry -> entry.getValue() > 1) + .map(Map.Entry::getKey) + .forEach(x -> printArgs(x.toString())); // 5. How are duplicates removed from a given array in Java? -// - int[] arr2 = {2,4,2,3,1,78}; - - int[] newarr = Arrays.stream(arr).distinct().toArray(); -// System.out.println(Arrays.toString(newarr)); + int[] newArr = Arrays.stream(arr).distinct().toArray(); + printArgs(Arrays.toString(newArr)); //6. Given a list of words, filter and print the palindromes List strings = List.of("level", "hello", "radar", "world", "deed"); List palindromeWords = strings.stream(). - filter(str -> str.equals(new StringBuilder(str).reverse().toString())).collect(Collectors.toList()); - -// System.out.println(palindromeWords); + filter(str -> str.contentEquals(new StringBuilder(str).reverse())).toList(); + printArgs(palindromeWords.toString()); // 7. How do you merge two sorted arrays into a single sorted array? - int[] array1 = {1, 3,32, 5, 7}; - int[] array2 = {2, 4, 6,62, 8}; + int[] array1 = {1, 3, 32, 5, 7}; + int[] array2 = {2, 4, 6, 62, 8}; int[] sortedArray = IntStream.concat(Arrays.stream(array1), Arrays.stream(array2)).sorted().toArray(); -// System.out.println(Arrays.toString(sortedArray)); - + printArgs(Arrays.toString(sortedArray)); //8. Given two lists of strings, concatenate them and remove duplicates. List list1 = List.of("apple", "banana", "orange"); List list2 = List.of("banana", "kiwi", "grape"); - List uniqueList = Stream.concat(list1.stream(), list2.stream()).distinct().collect(Collectors.toList()); -// System.out.println(uniqueList); - + List uniqueList = Stream.concat(list1.stream(), list2.stream()).distinct().toList(); + printArgs(uniqueList.toString()); // 9. Student Grade Classification - 70 and above pass @@ -91,26 +87,23 @@ public static void main(String[] args) { new Student("David", 90) ); - Map> studentMap = students.stream().collect(Collectors.groupingBy(student -> student.grade >= 70 ? "Pass" : "Fail")); -// System.out.println(studentMap); - + printArgs(studentMap.toString()); //10. Given a list of strings, sort them according to increasing order of their length. - List fruits = Arrays.asList("Mango","pear" ,"Apple", "Banana", "Pineapple", "Kiwi"); - - fruits.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println); + List fruits = Arrays.asList("Mango", "pear", "Apple", "Banana", "Pineapple", "Kiwi"); + fruits.stream().sorted(Comparator.comparingInt(String::length)).forEach(StreamsCodeDemoPart2::printArgs); //12.Partition a list of numbers into two groups: even and odd, using a custom predicate. List numbers1 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Map> partitionedNumbers = numbers1.stream() .collect(Collectors.partitioningBy(n -> n % 2 == 0)); - System.out.println(partitionedNumbers); + printArgs(partitionedNumbers.toString()); //13. Find the squares of the first three even numbers in a list. @@ -119,18 +112,23 @@ public static void main(String[] args) { .filter(n -> n % 2 == 0) .map(n -> n * n) .limit(3) - .collect(Collectors.toList()); + .toList(); + + printArgs(firstThreeSquares.toString()); // 14. Flatten a list of lists List> listOfLists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6)); List flattenedList = listOfLists.stream() .flatMap(List::stream) - .collect(Collectors.toList()); - - System.out.println(flattenedList); - + .toList(); + printArgs(flattenedList.toString()); + } + private static void printArgs(String message) { + System.out.println(message); } + + public record Student(String name, int grade) {} } From 44d9f302d9597148c85ef21363e1bdf078bf4491 Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 13:55:47 +0200 Subject: [PATCH 3/6] Added support for debug logs. Added a helper method for logs. Added a few more examples on Java streams. Used record because its fun. --- .../src/main/java/StreamsCodeDemoPart2.java | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java index 5943613..bf1ee03 100644 --- a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java +++ b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java @@ -1,16 +1,17 @@ -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; public class StreamsCodeDemoPart2 { + // Enable this to see logs. + private static final boolean DEBUG = true; + public static void main(String[] args) { //1. Given a sentence, find and print the frequency of each word. - String sentence = "Java is a programming language. Java is versatile. Java is fun."; + String sentence = "Java is a programming language. Java is versatile. Java is fun!"; Map wordFreqMap = Arrays.stream(sentence.split("\\s+")) .collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); @@ -29,7 +30,7 @@ public static void main(String[] args) { // 3. Given a list of names, group them by their first letter, and then count the number of names in each group. - String[] names = {"Alice", "Bob", "Charlie", "Amy", "Bill", "Anna"}; + String[] names = {"Alice", "Bob", "Charlie", "Amy", "Bill", "Anna", "John", "Michael", "Rambo", "Batman"}; Map namesMap = Arrays.stream(names) .collect(Collectors.groupingBy(s -> s.charAt(0), Collectors.counting())); @@ -124,11 +125,65 @@ public static void main(String[] args) { .toList(); printArgs(flattenedList.toString()); + + // 15. Find prime numbers in a given array. + + int[] primeInputList = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 29, 30}; + + printArgs( + Arrays.stream(primeInputList) + .filter(StreamsCodeDemoPart2::isPrime) + .sorted() + .toString() + ); + + // 16. String array to Map with String length as the key. Re-using fruits List here. :) + + printArgs( + fruits.stream() + .collect( + Collectors.toMap( + Function.identity(), + String::length + ) + ) + .toString() + ); + + // 17. Find the topper in the list of students. Re-using students here. + Optional topper = students.stream() + .max(Comparator.comparingInt(student -> student.grade)); + + topper.ifPresent(s -> printArgs(s.toString())); } private static void printArgs(String message) { - System.out.println(message); + if (DEBUG) { + System.out.println(message); + } else { + System.out.println("Please change 'DEBUG' to true to see logs."); + } + } + + private static boolean isPrime(int number) { + if (number <= 1) { + return false; + } + + for (int i = 2; i <= Math.sqrt(number); i++) { + if (number % i == 0) + return false; + } + return true; } - public record Student(String name, int grade) {} + public record Student(String name, int grade) { + @Override + public String toString() { + return "Student{" + + "name='" + name + '\'' + + ", grade=" + grade + + '}'; + } + } } From da8a611e2bc59ba67072a6c11d5c95bfcc258514 Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 14:18:49 +0200 Subject: [PATCH 4/6] Code clean up. --- LambdasAndStreams/pom.xml | 1 - .../src/main/java/StreamsCodeDemoPart2.java | 41 ++++++++++++++----- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/LambdasAndStreams/pom.xml b/LambdasAndStreams/pom.xml index b25cded..0e8e0e0 100644 --- a/LambdasAndStreams/pom.xml +++ b/LambdasAndStreams/pom.xml @@ -20,5 +20,4 @@ - \ No newline at end of file diff --git a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java index bf1ee03..03019a8 100644 --- a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java +++ b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java @@ -10,7 +10,7 @@ public class StreamsCodeDemoPart2 { public static void main(String[] args) { - //1. Given a sentence, find and print the frequency of each word. + // 1. Given a sentence, find and print the frequency of each word. String sentence = "Java is a programming language. Java is versatile. Java is fun!"; Map wordFreqMap = Arrays.stream(sentence.split("\\s+")) @@ -18,7 +18,7 @@ public static void main(String[] args) { printArgs(wordFreqMap.toString()); - //2. Given a list of integers, find out all the numbers starting with 1. + // 2. Given a list of integers, find out all the numbers starting with 1. List numList = Arrays.asList(12, 13, 18, 21, 90, 11); @@ -55,7 +55,7 @@ public static void main(String[] args) { printArgs(Arrays.toString(newArr)); - //6. Given a list of words, filter and print the palindromes + // 6. Given a list of words, filter and print the palindromes List strings = List.of("level", "hello", "radar", "world", "deed"); @@ -71,7 +71,7 @@ public static void main(String[] args) { int[] sortedArray = IntStream.concat(Arrays.stream(array1), Arrays.stream(array2)).sorted().toArray(); printArgs(Arrays.toString(sortedArray)); - //8. Given two lists of strings, concatenate them and remove duplicates. + // 8. Given two lists of strings, concatenate them and remove duplicates. List list1 = List.of("apple", "banana", "orange"); List list2 = List.of("banana", "kiwi", "grape"); @@ -93,20 +93,20 @@ public static void main(String[] args) { printArgs(studentMap.toString()); - //10. Given a list of strings, sort them according to increasing order of their length. + // 10. Given a list of strings, sort them according to increasing order of their length. List fruits = Arrays.asList("Mango", "pear", "Apple", "Banana", "Pineapple", "Kiwi"); fruits.stream().sorted(Comparator.comparingInt(String::length)).forEach(StreamsCodeDemoPart2::printArgs); - //12.Partition a list of numbers into two groups: even and odd, using a custom predicate. + // 11.Partition a list of numbers into two groups: even and odd, using a custom predicate. List numbers1 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Map> partitionedNumbers = numbers1.stream() .collect(Collectors.partitioningBy(n -> n % 2 == 0)); printArgs(partitionedNumbers.toString()); - //13. Find the squares of the first three even numbers in a list. + // 12. Find the squares of the first three even numbers in a list. List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); List firstThreeSquares = numbers.stream() @@ -117,7 +117,7 @@ public static void main(String[] args) { printArgs(firstThreeSquares.toString()); - // 14. Flatten a list of lists + // 13. Flatten a list of lists List> listOfLists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6)); List flattenedList = listOfLists.stream() @@ -126,7 +126,7 @@ public static void main(String[] args) { printArgs(flattenedList.toString()); - // 15. Find prime numbers in a given array. + // 14. Find prime numbers in a given array. int[] primeInputList = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 29, 30}; @@ -137,7 +137,7 @@ public static void main(String[] args) { .toString() ); - // 16. String array to Map with String length as the key. Re-using fruits List here. :) + // 15. String array to Map with String length as the key. Re-using fruits List here. :) printArgs( fruits.stream() @@ -150,13 +150,20 @@ public static void main(String[] args) { .toString() ); - // 17. Find the topper in the list of students. Re-using students here. + // 16. Find the topper in the list of students. Re-using students here. Optional topper = students.stream() .max(Comparator.comparingInt(student -> student.grade)); topper.ifPresent(s -> printArgs(s.toString())); } + + /** + * Helper method for printing the logs. + * This makes it easy to enable or disable logs. + * + * @param message String to be printed. + */ private static void printArgs(String message) { if (DEBUG) { System.out.println(message); @@ -165,6 +172,12 @@ private static void printArgs(String message) { } } + /** + * Method to check if the given number is prime or not. + * + * @param number int input for checking prime number. + * @return true if prime, false otherwise. + */ private static boolean isPrime(int number) { if (number <= 1) { return false; @@ -177,6 +190,12 @@ private static boolean isPrime(int number) { return true; } + /** + * Record to template a student's name and grade. + * + * @param name String name of the student. + * @param grade int grade of the student. + */ public record Student(String name, int grade) { @Override public String toString() { From beabed41a1d6b4293b6bb64316f9c339a5788ce5 Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 16:15:18 +0200 Subject: [PATCH 5/6] Introduced generics. --- .../src/main/java/StreamsCodeDemoPart2.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java index 03019a8..0d92043 100644 --- a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java +++ b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java @@ -16,7 +16,7 @@ public static void main(String[] args) { Map wordFreqMap = Arrays.stream(sentence.split("\\s+")) .collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); - printArgs(wordFreqMap.toString()); + printArgs(wordFreqMap); // 2. Given a list of integers, find out all the numbers starting with 1. @@ -26,7 +26,7 @@ public static void main(String[] args) { .filter(n -> String.valueOf(n).startsWith("1")) .toList(); - printArgs(numbersWithOne.toString()); + printArgs(numbersWithOne); // 3. Given a list of names, group them by their first letter, and then count the number of names in each group. @@ -35,7 +35,7 @@ public static void main(String[] args) { Map namesMap = Arrays.stream(names) .collect(Collectors.groupingBy(s -> s.charAt(0), Collectors.counting())); - printArgs(namesMap.toString()); + printArgs(namesMap); // 4. Find and print duplicate numbers in an array if it contains multiple duplicates? @@ -47,13 +47,13 @@ public static void main(String[] args) { //key -value - 2 (k), 2(val) .filter(entry -> entry.getValue() > 1) .map(Map.Entry::getKey) - .forEach(x -> printArgs(x.toString())); + .forEach(StreamsCodeDemoPart2::printArgs); // 5. How are duplicates removed from a given array in Java? int[] newArr = Arrays.stream(arr).distinct().toArray(); - printArgs(Arrays.toString(newArr)); + printArgs(newArr); // 6. Given a list of words, filter and print the palindromes @@ -62,22 +62,25 @@ public static void main(String[] args) { List palindromeWords = strings.stream(). filter(str -> str.contentEquals(new StringBuilder(str).reverse())).toList(); - printArgs(palindromeWords.toString()); + printArgs(palindromeWords); // 7. How do you merge two sorted arrays into a single sorted array? int[] array1 = {1, 3, 32, 5, 7}; int[] array2 = {2, 4, 6, 62, 8}; int[] sortedArray = IntStream.concat(Arrays.stream(array1), Arrays.stream(array2)).sorted().toArray(); - printArgs(Arrays.toString(sortedArray)); + printArgs(sortedArray); // 8. Given two lists of strings, concatenate them and remove duplicates. List list1 = List.of("apple", "banana", "orange"); List list2 = List.of("banana", "kiwi", "grape"); - List uniqueList = Stream.concat(list1.stream(), list2.stream()).distinct().toList(); - printArgs(uniqueList.toString()); + List uniqueList = Stream + .concat(list1.stream(), list2.stream()) + .distinct() + .toList(); + printArgs(uniqueList); // 9. Student Grade Classification - 70 and above pass @@ -91,7 +94,7 @@ public static void main(String[] args) { Map> studentMap = students.stream().collect(Collectors.groupingBy(student -> student.grade >= 70 ? "Pass" : "Fail")); - printArgs(studentMap.toString()); + printArgs(studentMap); // 10. Given a list of strings, sort them according to increasing order of their length. @@ -104,7 +107,7 @@ public static void main(String[] args) { Map> partitionedNumbers = numbers1.stream() .collect(Collectors.partitioningBy(n -> n % 2 == 0)); - printArgs(partitionedNumbers.toString()); + printArgs(partitionedNumbers); // 12. Find the squares of the first three even numbers in a list. @@ -115,7 +118,7 @@ public static void main(String[] args) { .limit(3) .toList(); - printArgs(firstThreeSquares.toString()); + printArgs(firstThreeSquares); // 13. Flatten a list of lists @@ -124,7 +127,7 @@ public static void main(String[] args) { .flatMap(List::stream) .toList(); - printArgs(flattenedList.toString()); + printArgs(flattenedList); // 14. Find prime numbers in a given array. @@ -134,7 +137,6 @@ public static void main(String[] args) { Arrays.stream(primeInputList) .filter(StreamsCodeDemoPart2::isPrime) .sorted() - .toString() ); // 15. String array to Map with String length as the key. Re-using fruits List here. :) @@ -147,24 +149,22 @@ public static void main(String[] args) { String::length ) ) - .toString() ); // 16. Find the topper in the list of students. Re-using students here. Optional topper = students.stream() .max(Comparator.comparingInt(student -> student.grade)); - topper.ifPresent(s -> printArgs(s.toString())); + topper.ifPresent(StreamsCodeDemoPart2::printArgs); } - /** * Helper method for printing the logs. * This makes it easy to enable or disable logs. * * @param message String to be printed. */ - private static void printArgs(String message) { + private static void printArgs(T message) { if (DEBUG) { System.out.println(message); } else { @@ -196,7 +196,7 @@ private static boolean isPrime(int number) { * @param name String name of the student. * @param grade int grade of the student. */ - public record Student(String name, int grade) { + private record Student(String name, int grade) { @Override public String toString() { return "Student{" + From 0788c6db02d45ffc7239c2ec2366e22bc6f30214 Mon Sep 17 00:00:00 2001 From: Prasanna Date: Thu, 18 Apr 2024 16:26:16 +0200 Subject: [PATCH 6/6] Code cleanup. --- LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java index 0d92043..abc2441 100644 --- a/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java +++ b/LambdasAndStreams/src/main/java/StreamsCodeDemoPart2.java @@ -4,6 +4,9 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +/** + * Class to demonstrate Streams, record and generics in Java. + */ public class StreamsCodeDemoPart2 { // Enable this to see logs. private static final boolean DEBUG = true; @@ -162,9 +165,9 @@ public static void main(String[] args) { * Helper method for printing the logs. * This makes it easy to enable or disable logs. * - * @param message String to be printed. + * @param message Generic type to be printed. It could be a String, a List, or a Map. */ - private static void printArgs(T message) { + private static void printArgs(V message) { if (DEBUG) { System.out.println(message); } else {