diff --git a/java-8/spliterator/ForEachRemainingExample.java b/java-8/spliterator/ForEachRemainingExample.java new file mode 100644 index 0000000..70a5708 --- /dev/null +++ b/java-8/spliterator/ForEachRemainingExample.java @@ -0,0 +1,22 @@ +package data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; + +public class ForEachRemainingExample { + + public static void main(String[] args) { + List values = new ArrayList<>(); + + values.add(1); + values.add(2); + values.add(3); + + Spliterator integerSpliterator = values.spliterator(); + integerSpliterator.forEachRemaining(System.out::println); + + } +} + + diff --git a/java-8/spliterator/Student.java b/java-8/spliterator/Student.java new file mode 100644 index 0000000..46df803 --- /dev/null +++ b/java-8/spliterator/Student.java @@ -0,0 +1,15 @@ +package data; + +public class Student { + String name; + int age; + + public Student(String name, int age) { + this.name = name; + this.age = age; + } + + public int getAge() { + return age; + } +} diff --git a/java-8/spliterator/StudentSpliterator.java b/java-8/spliterator/StudentSpliterator.java new file mode 100644 index 0000000..f469101 --- /dev/null +++ b/java-8/spliterator/StudentSpliterator.java @@ -0,0 +1,67 @@ +package data; + +import java.util.List; +import java.util.Spliterator; +import java.util.function.Consumer; + +public class StudentSpliterator implements Spliterator { + private final List studentList; + + private int endIndex; + private int startIndex; + + public StudentSpliterator(List studentList) { + this(studentList, 0, studentList.size()); + } + + private StudentSpliterator(List studentList, int startIndex, int endIndex) { + this.studentList = studentList; + this.startIndex = startIndex; + this.endIndex = endIndex; + } + + @Override + public boolean tryAdvance(Consumer action) { + if (getSize() > 0) { + action.accept(studentList.get(startIndex)); + startIndex++; + return true; + } + return false; + } + + @Override + public Spliterator trySplit() { + + if (getSize() == 1) { + return null; + } + + int newStartIndex; + int newEndIndex = endIndex; + + if (getSize() % 2 == 0) { + newStartIndex = startIndex + getSize() / 2; + this.endIndex -= getSize() / 2; + } else { + newStartIndex = startIndex + getSize() / 2 + 1; + this.endIndex -= getSize() / 2; + } + return new StudentSpliterator(studentList, newStartIndex, newEndIndex); + } + + + private int getSize() { + return endIndex - startIndex; + } + + @Override + public long estimateSize() { + return studentList.size(); + } + + @Override + public int characteristics() { + return NONNULL; + } +} diff --git a/java-8/spliterator/TryAdvanceExample.java b/java-8/spliterator/TryAdvanceExample.java new file mode 100644 index 0000000..9fb3a21 --- /dev/null +++ b/java-8/spliterator/TryAdvanceExample.java @@ -0,0 +1,22 @@ +package data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; + +public class TryAdvanceExample { + + public static void main(String[] args){ + List values = new ArrayList<>(); + + values.add("one"); + values.add("two"); + values.add("three"); + + Spliterator stringSpliterator = values.spliterator(); + + while(stringSpliterator.tryAdvance(System.out::println)){ + //inside while loop + } + } +} diff --git a/java-8/spliterator/TrySplitExample.java b/java-8/spliterator/TrySplitExample.java new file mode 100644 index 0000000..a733740 --- /dev/null +++ b/java-8/spliterator/TrySplitExample.java @@ -0,0 +1,44 @@ +package data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; + +public class TrySplitExample { + + + public static void main(String[] args) { + List values = new ArrayList<>(); + + values.add("one"); + values.add("two"); + values.add("three"); + values.add("four"); + values.add("five"); + values.add("six"); + values.add("seven"); + values.add("eight"); + values.add("nine"); + values.add("ten"); + + Spliterator firstSpliterator = values.spliterator(); + Spliterator secondSpliterator = firstSpliterator.trySplit(); + Spliterator thirdSpliterator = firstSpliterator.trySplit(); + + System.out.println("firstSpliterator : "); + while (firstSpliterator.tryAdvance(System.out::println)) { + //inside while loop + } + + System.out.println("secondSpliterator : "); + while (secondSpliterator.tryAdvance(System.out::println)) { + //inside while loop + } + + System.out.println("thirdSpliterator : "); + while (thirdSpliterator.tryAdvance(System.out::println)) { + //inside while loop + } + } +} +