Skip to content

Commit 1915222

Browse files
Neetika23Neetika Khandelwal
andauthored
Successive pair algo (eugenp#17136)
* Successive Pair * Create SuccessivePairsUnitTest.java * Update SuccessivePairs.java * Update SuccessivePairsUnitTest.java --------- Co-authored-by: Neetika Khandelwal <kwal.neetika2398@gmail.com>
1 parent 5553244 commit 1915222

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.baledung.algorithms.successivepairs;
2+
3+
import java.util.AbstractMap.SimpleEntry;
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
import java.util.stream.IntStream;
9+
import java.util.stream.Stream;
10+
11+
public class SuccessivePairs {
12+
13+
public static <T> List<SimpleEntry<T, T>> collectSuccessivePairs(Stream<T> stream) {
14+
List<T> list = stream.collect(Collectors.toList());
15+
return IntStream.range(0, list.size() - 1)
16+
.mapToObj(i -> new SimpleEntry<>(list.get(i), list.get(i + 1)))
17+
.collect(Collectors.toList());
18+
}
19+
20+
public static <T> Stream<List<T>> pairwise(Stream<T> stream) {
21+
List<T> list = stream.collect(Collectors.toList());
22+
List<List<T>> pairs = new ArrayList<>();
23+
for (int i = 0; i < list.size() - 1; i++) {
24+
pairs.add(Arrays.asList(list.get(i), list.get(i + 1)));
25+
}
26+
return pairs.stream();
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.baeldung.algorithms.successivepairs;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.util.AbstractMap.SimpleEntry;
7+
import java.util.Arrays;
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
import java.util.stream.Stream;
11+
12+
import org.junit.jupiter.api.Test;
13+
14+
import com.baledung.algorithms.successivepairs.SuccessivePairs;
15+
16+
public class SuccessivePairsUnitTest {
17+
18+
@Test
19+
public void givenEmptyStream_whenUsingSimpleEntry_thenCollectPairs() {
20+
Stream<Integer> stream = Stream.empty();
21+
List<SimpleEntry<Integer, Integer>> pairs = SuccessivePairs.collectSuccessivePairs(stream);
22+
assertTrue(pairs.isEmpty());
23+
}
24+
25+
@Test
26+
public void givenSingleElement_whenUsingSimpleEntry_thenCollectPairs() {
27+
Stream<Integer> stream = Stream.of(1);
28+
List<SimpleEntry<Integer, Integer>> pairs = SuccessivePairs.collectSuccessivePairs(stream);
29+
assertTrue(pairs.isEmpty());
30+
}
31+
32+
@Test
33+
public void givenMultipleElementStream_whenUsingSimpleEntry_thenCollectPairs() {
34+
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
35+
List<SimpleEntry<Integer, Integer>> pairs = SuccessivePairs.collectSuccessivePairs(stream);
36+
assertEquals(4, pairs.size());
37+
38+
assertEquals(new SimpleEntry<>(1, 2), pairs.get(0));
39+
assertEquals(new SimpleEntry<>(2, 3), pairs.get(1));
40+
assertEquals(new SimpleEntry<>(3, 4), pairs.get(2));
41+
assertEquals(new SimpleEntry<>(4, 5), pairs.get(3));
42+
}
43+
44+
@Test
45+
public void givenStreamWithDuplicate_whenUsingSimpleEntry_thenCollectPairs() {
46+
Stream<Integer> stream = Stream.of(1, 1, 2, 2, 3, 3);
47+
List<SimpleEntry<Integer, Integer>> pairs = SuccessivePairs.collectSuccessivePairs(stream);
48+
assertEquals(5, pairs.size());
49+
50+
assertEquals(new SimpleEntry<>(1, 1), pairs.get(0));
51+
assertEquals(new SimpleEntry<>(1, 2), pairs.get(1));
52+
assertEquals(new SimpleEntry<>(2, 2), pairs.get(2));
53+
assertEquals(new SimpleEntry<>(2, 3), pairs.get(3));
54+
assertEquals(new SimpleEntry<>(3, 3), pairs.get(4));
55+
}
56+
57+
@Test
58+
public void givenStreamWithLetters_whenUsingStatefulTransform_thenCollectPairs() {
59+
Stream<String> stream = Stream.of("a", "b", "c", "d", "e");
60+
List<List<String>> result = SuccessivePairs.pairwise(stream)
61+
.collect(Collectors.toList());
62+
63+
List<List<String>> expected = Arrays.asList(Arrays.asList("a", "b"), Arrays.asList("b", "c"), Arrays.asList("c", "d"), Arrays.asList("d", "e"));
64+
65+
assertEquals(expected, result);
66+
}
67+
}

0 commit comments

Comments
 (0)