Skip to content

Instantly share code, notes, and snippets.

@SergejIsbrecht
Created April 3, 2017 20:21
Show Gist options
  • Save SergejIsbrecht/97e2374f7c227d9d3c3627287d49aad8 to your computer and use it in GitHub Desktop.
Save SergejIsbrecht/97e2374f7c227d9d3c3627287d49aad8 to your computer and use it in GitHub Desktop.
Find Sequence in Observable.
@Test
public void rollingBufferSearchForSequenceTest() throws Exception {
TestObserver<List<Integer>> listTestObserver = Observable.fromIterable(Arrays.asList(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6))
.compose(searchForSequence(Arrays.asList(1, 2)))
.test()
.assertComplete()
.assertValueCount(2);
List<Integer> collect = listTestObserver.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
assertThat(collect, contains(1, 2, 1, 2));
}
private static <T> ObservableTransformer<T, List<T>> searchForSequence(Collection<T> items) {
return upstream -> upstream.buffer(items.size(), 1)
.filter(integers -> integers.size() == items.size())
.filter(integers -> integers.containsAll(items));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment