diff --git a/core-java/pom.xml b/core-java/pom.xml
index 586486027a..321a08dbff 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -196,6 +196,16 @@
hirondelle-date4j
${hirondelle-date4j.version}
+
+ com.codepoetics
+ protonpack
+ ${protonpack.version}
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
@@ -420,6 +430,8 @@
4.6-b01
2.9.9
1.5.1
+ 1.13
+ 0.6.5
1.3
diff --git a/core-java/src/main/java/com/baeldung/stream/StreamIndices.java b/core-java/src/main/java/com/baeldung/stream/StreamIndices.java
new file mode 100644
index 0000000000..b101bc2740
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/stream/StreamIndices.java
@@ -0,0 +1,37 @@
+package com.baeldung.stream;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import com.codepoetics.protonpack.Indexed;
+import com.codepoetics.protonpack.StreamUtils;
+
+public class StreamIndices {
+
+ public static List getEvenIndexedStrings(String[] names) {
+ List evenIndexedNames = IntStream.range(0, names.length)
+ .filter(i -> i % 2 == 0).mapToObj(i -> names[i])
+ .collect(Collectors.toList());
+ return evenIndexedNames;
+ }
+
+ public static List> getEvenIndexedStrings(List names) {
+ List> list = StreamUtils.zipWithIndex(names.stream())
+ .filter(i -> i.getIndex() % 2 == 0).collect(Collectors.toList());
+ return list;
+ }
+
+ public static List> getOddIndexedStrings(List names) {
+ List> list = StreamUtils.zipWithIndex(names.stream())
+ .filter(i -> i.getIndex() % 2 == 1).collect(Collectors.toList());
+ return list;
+ }
+
+ public static List getOddIndexedStrings(String[] names) {
+ List oddIndexedNames = IntStream.range(0, names.length)
+ .filter(i -> i % 2 == 1).mapToObj(i -> names[i])
+ .collect(Collectors.toList());
+ return oddIndexedNames;
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/stream/StreamIndicesTest.java b/core-java/src/test/java/com/baeldung/stream/StreamIndicesTest.java
new file mode 100644
index 0000000000..ca60544788
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/stream/StreamIndicesTest.java
@@ -0,0 +1,50 @@
+package com.baeldung.stream;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Test;
+
+import com.codepoetics.protonpack.Indexed;
+
+public class StreamIndicesTest {
+
+ @Test
+ public void givenArray_whenGetIndexedStrings_thenReturnListOfEvenIndexedStrings() {
+ String[] names = { "Afrim", "Bashkim", "Besim", "Lulzim", "Durim", "Shpetim" };
+ List expectedResult = Arrays.asList("Afrim", "Besim", "Durim");
+ List actualResult = StreamIndices.getEvenIndexedStrings(names);
+
+ assertEquals(expectedResult, actualResult);
+ }
+
+ @Test
+ public void givenArray_whenGetIndexedStrings_thenReturnListOfOddStrings() {
+ String[] names = { "Afrim", "Bashkim", "Besim", "Lulzim", "Durim", "Shpetim" };
+ List expectedResult = Arrays.asList("Bashkim", "Lulzim", "Shpetim");
+ List actualResult = StreamIndices.getOddIndexedStrings(names);
+
+ assertEquals(expectedResult, actualResult);
+ }
+
+ @Test
+ public void givenList_whenGetIndexedStrings_thenReturnListOfEvenIndexedStrings() {
+ List names = Arrays.asList("Afrim", "Bashkim", "Besim", "Lulzim", "Durim", "Shpetim");
+ List> expectedResult = Arrays.asList(Indexed.index(0, "Afrim"), Indexed.index(2, "Besim"), Indexed.index(4, "Durim"));
+ List> actualResult = StreamIndices.getEvenIndexedStrings(names);
+
+ assertEquals(expectedResult, actualResult);
+ }
+
+ @Test
+ public void givenList_whenGetIndexedStrings_thenReturnListOfOddIndexedStrings() {
+ List names = Arrays.asList("Afrim", "Bashkim", "Besim", "Lulzim", "Durim", "Shpetim");
+ List> expectedResult = Arrays.asList(Indexed.index(1, "Bashkim"), Indexed.index(3, "Lulzim"), Indexed.index(5, "Shpetim"));
+ List> actualResult = StreamIndices.getOddIndexedStrings(names);
+
+ assertEquals(expectedResult, actualResult);
+ }
+
+}
\ No newline at end of file