diff --git a/pom.xml b/pom.xml
index 2f7dd97..2706957 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,23 +5,31 @@
org.springframework.boot
spring-boot-starter-parent
- 2.6.2
+ 3.3.2
com.practice
- JavaProblems
+ JavaAssessments
0.1
- JavaProblems
+ Java_Assessment
21
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
- com.oracle.database.jdbc
- ojdbc10
- 19.3.0.0
+ io.jsonwebtoken
+ jjwt
+ 0.9.1
@@ -31,27 +39,39 @@
org.springframework.boot
- spring-boot-starter-log4j2
+ spring-boot-starter-web
+
+ org.projectlombok
+ lombok
+ true
+
-
-
-
-
-
+
+ com.mysql
+ mysql-connector-j
+ 9.3.0
+
+
+ com.oracle.database.jdbc
+ ojdbc10
+ 19.3.0.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-log4j2
+
+
junit
junit
4.13.1
test
-
- mysql
- mysql-connector-java
-
@@ -71,6 +91,13 @@
3.9
+
+
+ com.h2database
+ h2
+ runtime
+
+
@@ -83,4 +110,4 @@
-
\ No newline at end of file
+
diff --git a/src/main/java/com/advanceJava/ConsumerSupplierPredicates.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/ConsumerSupplierPredicates.java
similarity index 96%
rename from src/main/java/com/advanceJava/ConsumerSupplierPredicates.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/ConsumerSupplierPredicates.java
index 4ef237f..585a093 100644
--- a/src/main/java/com/advanceJava/ConsumerSupplierPredicates.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/ConsumerSupplierPredicates.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
import java.util.function.Consumer;
diff --git a/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/FunctionalInterface1.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/FunctionalInterface1.java
new file mode 100644
index 0000000..5b5b8ee
--- /dev/null
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/FunctionalInterface1.java
@@ -0,0 +1,47 @@
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
+interface aI {
+ public int func(String a, String b);
+
+ // It can have default func
+ default int func(String a) {
+ return a.length();
+ }
+}
+
+/*
+ * Step 1 : Do not implement interface
+ * Step 2 : Call interface name with return type aI(a) =
+ * Step 3 : take args (a , b )
+ * Step 4 : defination of that absratct method
+ * Step 5 : call that method
+ */
+
+interface bI {
+ public int operation(int a, int b);
+}
+
+
+public class FunctionalInterface1 {
+ public static void main(String[] args) {
+
+ /* Both are same ainterface and ainterface2 */
+ aI ainterface = (b, c) -> {
+ return b.length() + c.length();
+ };
+
+ aI ainterface2 = (b, c) -> b.length() + c.length();
+
+ int count = ainterface.func("abc", "xyz");
+ int count2 = ainterface2.func("abcd", "wxyz");
+
+ System.out.println(count);
+ System.out.println(count2);
+
+ /* ************ */
+
+ bI add = (l, m) -> l + m;
+ bI mul = (l, m) -> l * m;
+
+ }
+}
diff --git a/src/main/java/com/advanceJava/Java8Features.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Features.java
similarity index 98%
rename from src/main/java/com/advanceJava/Java8Features.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Features.java
index 098e5cf..6a56bfe 100644
--- a/src/main/java/com/advanceJava/Java8Features.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Features.java
@@ -1,4 +1,6 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
+import com.advanceJava.CollectionUtils;
import java.util.Iterator;
import java.util.Optional;
@@ -154,7 +156,7 @@ public static void main(String[] args) {
*/
class ForEachExample {
public static void main(String[] args) {
- CollectionUtils.sampleList().forEach(System.out::println);
+ CollectionUtils.sampleList().forEach(System.out::println);
System.out.println("ForEachExample.main()");
CollectionUtils.sampleList().forEach(smple -> System.out.println(smple));
diff --git a/src/main/java/com/coreJava/Java8Predicates.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Predicates.java
similarity index 94%
rename from src/main/java/com/coreJava/Java8Predicates.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Predicates.java
index 5fe6d96..8b17370 100644
--- a/src/main/java/com/coreJava/Java8Predicates.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/Java8Predicates.java
@@ -1,4 +1,4 @@
-package com.coreJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
import java.util.List;
import java.util.function.Predicate;
diff --git a/src/main/java/com/advanceJava/LambdaExpression1.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression1.java
similarity index 94%
rename from src/main/java/com/advanceJava/LambdaExpression1.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression1.java
index 0bfe1d4..8567289 100755
--- a/src/main/java/com/advanceJava/LambdaExpression1.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression1.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
/* It provides a clear and concise way to represent one method interface using an expression.
It is very useful in collection library.
diff --git a/src/main/java/com/advanceJava/LambdaExpression2.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression2.java
similarity index 90%
rename from src/main/java/com/advanceJava/LambdaExpression2.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression2.java
index fad0abe..88f8d19 100755
--- a/src/main/java/com/advanceJava/LambdaExpression2.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression2.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
/**
* here methodBody of FuncInterface is in lambda Expression
diff --git a/src/main/java/com/advanceJava/LambdaExpression3.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression3.java
similarity index 86%
rename from src/main/java/com/advanceJava/LambdaExpression3.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression3.java
index 2f97aeb..dc035ed 100755
--- a/src/main/java/com/advanceJava/LambdaExpression3.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression3.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
interface FuncIntrWithMultParam{
int add (int a , int b );
diff --git a/src/main/java/com/advanceJava/LambdaExpression4.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression4.java
similarity index 91%
rename from src/main/java/com/advanceJava/LambdaExpression4.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression4.java
index e2906aa..439e4e0 100755
--- a/src/main/java/com/advanceJava/LambdaExpression4.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression4.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
import java.util.*;
diff --git a/src/main/java/com/advanceJava/LambdaExpression5.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression5.java
similarity index 91%
rename from src/main/java/com/advanceJava/LambdaExpression5.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression5.java
index 5b29f6f..22ae173 100755
--- a/src/main/java/com/advanceJava/LambdaExpression5.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression5.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
public class LambdaExpression5 {
diff --git a/src/main/java/com/advanceJava/LambdaExpression7.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression7.java
similarity index 93%
rename from src/main/java/com/advanceJava/LambdaExpression7.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression7.java
index a0e85e1..de0aac9 100755
--- a/src/main/java/com/advanceJava/LambdaExpression7.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression7.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
import java.util.ArrayList;
diff --git a/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression8.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression8.java
new file mode 100644
index 0000000..40388ce
--- /dev/null
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/LambdaExpression8.java
@@ -0,0 +1,214 @@
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+@Data
+@Builder
+@AllArgsConstructor
+class Person {
+ String name;
+ int age;
+}
+
+public class LambdaExpression8 {
+
+ public static void main(String[] args) {
+ new LambdaExpression8().sortMethod();
+
+ add2List();
+ reverseList();
+ reverseString();
+ }
+
+ private static void add2List() {
+
+ List l1 = new java.util.ArrayList<>();
+ l1.add("A");
+ l1.add("B"); // We can not use List..of() bcause it is immutable and can use addAll on that
+ List l2 = List.of("v", "x");
+ List l3 = Stream.builder().add(l1).add(l2).build().toList();// [[a, b], [v, x]]
+
+ var l4 = Stream.concat(l1.stream(), l2.stream()).toList(); // [a, b, v, x]
+ System.out.println(l3);
+ System.out.println(l4);
+ l1.addAll(l2);
+ System.out.println(l1);
+ }
+
+ private void sortMethod() {
+ List words = List.of("apple", "banana", "kiwi");
+ List sortedWords = words.stream()
+ .sorted(Comparator.comparing(String::length)) //
+
+ .sorted(String::compareTo)
+ .sorted(testMethod())
+ .collect(Collectors.toList());
+ System.out.println("Sorted Words by Length: " + sortedWords);
+ }
+
+ // Note Wrapper class have compareTo method
+ private Comparator super String> testMethod() {
+ return String::compareTo;
+ }
+
+ private static void reverseList() {
+ }
+
+ private static void reverseString() {
+ String app = "apple";
+
+ app.chars()
+ .mapToObj(c -> String.valueOf((char) c)) // This step is imp
+ .reduce("", (a, b) -> b + a)
+ .toString();
+
+ String input = "hello";
+ String reversed =
+ input.chars()
+ .mapToObj(c -> String.valueOf((char) c))
+ .reduce("", (a, b) -> b + a);
+ System.out.println("Reversed String: " + reversed);
+
+ // sum of digit
+ String a = "1234";
+
+ var s = a.chars()
+ .mapToObj(c -> ((char) c))
+ .map(Character::getNumericValue)
+ .reduce(0, (a1, b1) -> a1 + b1);
+
+ List wordList = List.of("apple", "banana", "kiwi", "abcd", "abcde", "banana");
+ wordList.stream()
+ .sorted(Comparator.comparing(String::length))
+ .sorted(Comparator.reverseOrder())
+ .findFirst()
+ .ifPresent(System.out::println);
+
+
+ wordList.stream()
+ .max(Comparator.comparing(String::length))
+ .ifPresent(System.out::println);
+
+
+ Map> grouped = wordList.stream()
+ .collect(Collectors.groupingBy(Function.identity())); // it means x -> x // mostly used in map where we provide key as x only
+ // / toMap(x->x , x->x
+
+ Map> grouped1 = wordList.stream()
+ .collect(Collectors.groupingBy(x -> x));
+
+
+ System.out.println("Grouped Words: " + grouped);
+
+
+ var a1 = wordList.stream().collect(Collectors.groupingBy(String::length));
+ System.out.println(a1);
+
+ List list = List.of(
+ new Person("Alice", 25),
+ new Person("Bob", 30),
+ new Person("Charlie", 25));
+
+ var v = list.stream()
+ .collect(Collectors.groupingBy(Person::getName));
+ System.out.println(v);
+
+ List list1 = List.of(1, 2, 3, 4);
+ List list2 = List.of(3, 4, 5, 6);
+
+ var p1 = list1.stream()
+ .filter(u -> list2.contains(u)) // !
+ .toList();
+ System.out.println(p1);
+
+ // 37. Count Occurrences/counts of Each Vowel in String // "apple"
+ var aaa = app.chars()
+ .mapToObj(c -> (char) c)
+ .filter(c1 -> "aeiou".contains(c1.toString())) //.filter(Character::isDigit) to filter only charasters
+ .collect(Collectors.groupingBy(cg -> cg, Collectors.counting()));
+
+ System.out.println(aaa);
+
+ // Reverse a List Using Streams
+ System.out.println(wordList.reversed().stream().toList());
+
+ //40. Reverse a String Using Streams
+ String revers = new StringBuilder("hello").reverse().toString();
+
+
+// String reversed1 = Stream.of(input.split(""))
+// .collect(Collectors.collectingAndThen(Collectors.toList(),
+// list -> {
+// Collections.reverse(list);
+// return String.join("", list);
+// }));System.out.println(reversed1);
+
+//
+ String reversed1 = input.chars()
+ .mapToObj(c -> String.valueOf((char) c))
+ .reduce("", (a2, b2) -> b2 + a2);
+ System.out.println("Reversed String: " + reversed);
+
+ //41. Find the Most Frequent Element in List
+ input.chars()
+ .mapToObj(c -> ((char) c))
+ // .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
+ .collect(Collectors.groupingBy(f -> f, Collectors.counting()))
+ .entrySet()
+ .stream()
+ .max(Map.Entry.comparingByValue())
+ .map(Map.Entry::getKey)
+ .orElse(null);
+
+
+ // Check if a String is a Palindrome NAMAN
+ String inp = "madam";
+ boolean isPalindrome = IntStream.range(0, inp.length() / 2)
+ .allMatch(i -> inp.charAt(i) == inp.charAt(inp.length() - 1 - i));
+
+ System.out.println(
+ "abcdaabbccc".chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(x -> x, Collectors.counting())));
+
+
+ // 47. Generate the Fibonacci Sequence Using Streams
+ IntStream.range(0,10)
+ .reduce( 1, (aaaa,bbbb)-> aaaa*bbbb )
+ ;
+
+ // 52. Find the Longest Palindrome in a List of Strings
+
+//54. Find the Longest Word in a String
+
+
+ //58. Find the Number of Characters in a File
+ //59. Find the Number of Words in a File
+
+
+ //61. Process a CSV File and Calculate Aggregate Statistics
+
+// Reverse String 1. chars . mapToObj ( String.valueOf ) ,reduce( "",(a,b)-> b+a)
+ var sss = "sachin".chars()
+ .mapToObj(c -> String.valueOf((char) c))
+ .reduce("", (s1, s2) -> s2 + s1);
+ System.out.println("----" + sss);
+
+
+ int arr[] = {1, 35, 7, 9, 6};
+ ArrayList l1 = new ArrayList( 3);
+ List l = Arrays.asList(arr);
+
+
+ }
+}
+
+
+//Reverse a String Using Streams
+
diff --git a/src/main/java/com/advanceJava/MethodRefrence1.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence1.java
similarity index 94%
rename from src/main/java/com/advanceJava/MethodRefrence1.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence1.java
index 42da5fe..4da0607 100755
--- a/src/main/java/com/advanceJava/MethodRefrence1.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence1.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
/*
used to refer method of functional interface.
alternate of lambda expression
diff --git a/src/main/java/com/advanceJava/MethodRefrence2.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence2.java
similarity index 93%
rename from src/main/java/com/advanceJava/MethodRefrence2.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence2.java
index b4c2a2f..b0739ef 100755
--- a/src/main/java/com/advanceJava/MethodRefrence2.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence2.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
/** Runnable interface contains only one abstract method.
diff --git a/src/main/java/com/advanceJava/MethodRefrence3.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence3.java
similarity index 96%
rename from src/main/java/com/advanceJava/MethodRefrence3.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence3.java
index 7fd44c6..9e576ab 100755
--- a/src/main/java/com/advanceJava/MethodRefrence3.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence3.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
// we override static methods by referring methods.
// In the following example, we have defined and overloaded three add methods.
diff --git a/src/main/java/com/advanceJava/MethodRefrence4.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence4.java
similarity index 93%
rename from src/main/java/com/advanceJava/MethodRefrence4.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence4.java
index a3234cb..4c2c6fd 100755
--- a/src/main/java/com/advanceJava/MethodRefrence4.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence4.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
/**
*
diff --git a/src/main/java/com/advanceJava/MethodRefrence5.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence5.java
similarity index 87%
rename from src/main/java/com/advanceJava/MethodRefrence5.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence5.java
index ea3a9b2..8ba0bca 100755
--- a/src/main/java/com/advanceJava/MethodRefrence5.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/MethodRefrence5.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
interface Messageable1{
Message1 getMessage(String msg);
diff --git a/src/main/java/com/advanceJava/StreamApi0.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi0.java
similarity index 97%
rename from src/main/java/com/advanceJava/StreamApi0.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi0.java
index 341f7ef..5e31d7f 100644
--- a/src/main/java/com/advanceJava/StreamApi0.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi0.java
@@ -1,4 +1,5 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/com/advanceJava/StreamApi1.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi1.java
similarity index 90%
rename from src/main/java/com/advanceJava/StreamApi1.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi1.java
index 70d983e..814b21c 100755
--- a/src/main/java/com/advanceJava/StreamApi1.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi1.java
@@ -1,4 +1,6 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
+import com.Java8StreamLambdaFuncInterfaceMethodRef._1Java8Features;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/com/advanceJava/StreamApi2.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi2.java
similarity index 90%
rename from src/main/java/com/advanceJava/StreamApi2.java
rename to src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi2.java
index e86d2e8..50e7ff0 100644
--- a/src/main/java/com/advanceJava/StreamApi2.java
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi2.java
@@ -1,4 +1,4 @@
-package com.advanceJava;
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
import java.util.stream.*;
diff --git a/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi3.java b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi3.java
new file mode 100644
index 0000000..9b49700
--- /dev/null
+++ b/src/main/java/com/Java8StreamLambdaFuncInterfaceMethodRef/StreamApi3.java
@@ -0,0 +1,86 @@
+package com.Java8StreamLambdaFuncInterfaceMethodRef;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+// Iterating With Stream Api With Reduce
+/* Reduce() takes a sequence of input elements
+and combines them into a single summary result
+ by repeated operation. */
+
+public class StreamApi3 {
+
+ public static void main(String[] args) {
+ List list = new LinkedList<>();
+ list.add(new Studs(4, "Sachin", "Phy", 50));
+ list.add(new Studs(2, "Rahul", "Chem", 53));
+ list.add(new Studs(1, "Amita", "Arts", 22));
+ list.add(new Studs(3, "Yatin", "Math", 73));
+ list.add(new Studs(4, "Puneet", "Eco", 14));
+ list.add(new Studs(6, "Pooja", "Mech", 82));
+ list.add(new Studs(8, "Manish", "Comp", 12));
+
+
+ System.out.println("Count Where Marks > 50 " +
+ list.stream()
+ .filter(p -> p.marks > 50)
+ .count());
+ // Via Collectors list.stream().collect(Collectors.counting());
+ System.out.println("Sum Where " +
+ list.stream()
+ .map(p -> p.marks)
+ .reduce(0, Integer::sum));
+ System.out.println("Total Sum marks Via Collectors " +
+ list.stream()
+ .collect(Collectors.summingInt(x -> x.marks)));
+
+ System.out.println("Sum For > 50 " +
+ list.stream()
+ .filter(p -> p.marks > 50)
+ .map(p -> p.marks) // use ( Studs :: getMarks) ie. method refrence
+ // though Studs should have getMarks()
+ .reduce(0, Integer::sum));
+
+ System.out.println(" Max marks " +
+ list.stream()
+ .max((p1, p2) -> (p1.marks - p2.marks))
+ .get().marks);
+
+ System.out.println(" Min marks " +
+ list.stream()
+ .min((p1, p2) -> (p1.marks - p2.marks))
+ .get().marks);
+
+ System.out.println(" Iterate ");
+
+ Map nameRollMap = list.stream()
+ .collect(Collectors.toMap(p -> p.name, p -> p.roll));
+
+ Stream.Builder