Implementation of simplified and modified version of Java Stream API with lazy evaluation.
This project is distributed via JitPack. Register a JitPack repository at your pom.xml:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
And add the following dependency:
<dependency>
<groupId>com.github.jolice</groupId>
<artifactId>Stream</artifactId>
<version>v1.0</version>
</dependency>
StreamFactory class is responsible for creating streams.
A stream may be constructed from fixed list of elements:
Stream<String> stream = StreamFactory.of("alpha", "bravo", "charlie", "delta", "echo");
Or from any Iterable implementation:
List<String> list = Arrays.asList("alpha", "bravo", "charlie", "delta", "echo");
Stream<String> stream = StreamFactory.of(list);
Empty stream may be created as follows:
Stream<String> stream = StreamFactory.empty();
Infinite streams are also supported:
Stream<Integer> stream = StreamFactory.iterate(1, i -> i + 1).limit(5);
- Iterator
- Filter
- Map
- FlatMap
- Distinct
- Sorted
- Peek
- Limit
- Skip
- ForEach
- ToArray
- Reduce
- Collect
- Min
- Max
- Count
- AnyMatch
- AllMatch
- NoneMatch
- FindAny
TakeWhile
skips all elements after the first one that doesn't match a predicate:
StreamFactory.of(1,2,3,4,5,6).takeWhile(x -> x <= 3)
.collect(Collectors.toList()); // [1,2,3]
DropWhile
skips all elements before the first one that matches a predicate:
StreamFactory.of(6,5,4,3,2,1).dropWhile(x -> x > 3)
.collect(Collectors.toList()); // [3,2,1]
FiterNot
filters out the elements that match the predicate, inverse for Filter
:
StreamFactory.of(1,2,3,4,5,6).filterNot(x -> x % 2 == 0)
.collect(Collectors.toList()); // [1,3,5]
FilterNulls
filters out null items:
StreamFactory.of(1, 2, null, 4, null, 6).filterNulls()
.collect(Collectors.toList()); // [1, 2, 4, 6]
- Parallel
- MapToInt / Double / Long
- FlatMapToInt / Double / Long
- ForEachOrdered