Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stream<Pair> pairStream = Streams.iterate(0, (i) -> i + 1).map( // natural numbers
- new Function<Integer, Pair>() {
- Integer previous;
- @Override
- public Pair apply(Integer integer) {
- Pair pair = null;
- if (previous != null) pair = new Pair(previous, integer);
- previous = integer;
- return pair;
- }
- }).substream(1); // drop first null
- pairStream.limit(1_000_000).forEach(i -> System.out.println(i));
- IntStream.range(1, arrayList.size())
- .mapToObj(i -> new Pair(arrayList.get(i-1), arrayList.get(i)))
- .forEach(System.out::println);
- public class ConsecutiveSpliterator<T> implements Spliterator<List<T>> {
- private final Spliterator<T> wrappedSpliterator;
- private final int n;
- private final Deque<T> deque;
- private final Consumer<T> dequeConsumer;
- public ConsecutiveSpliterator(Spliterator<T> wrappedSpliterator, int n) {
- this.wrappedSpliterator = wrappedSpliterator;
- this.n = n;
- this.deque = new LinkedList<>();
- this.dequeConsumer = new Consumer<T>() {
- @Override
- public void accept(T t) {
- deque.addLast(t);
- }
- };
- }
- @Override
- public boolean tryAdvance(Consumer<? super List<T>> action) {
- deque.pollFirst();
- fillDeque();
- if (deque.size() == n) {
- List<T> list = new ArrayList<>(deque);
- action.accept(list);
- return true;
- } else {
- return false;
- }
- }
- private void fillDeque() {
- while (deque.size() < n && wrappedSpliterator.tryAdvance(dequeConsumer))
- ;
- }
- @Override
- public Spliterator<List<T>> trySplit() {
- return null;
- }
- @Override
- public long estimateSize() {
- return wrappedSpliterator.estimateSize();
- }
- @Override
- public int characteristics() {
- return wrappedSpliterator.characteristics();
- }
- }
- public <E> Stream<List<E>> consecutiveStream(Stream<E> stream, int n) {
- Spliterator<E> spliterator = stream.spliterator();
- Spliterator<List<E>> wrapper = new ConsecutiveSpliterator<>(spliterator, n);
- return StreamSupport.stream(wrapper, false);
- }
- consecutiveStream(Stream.of(0, 1, 2, 3, 4, 5), 2).map(
- new Function<List<Integer>, Pair>() {
- public Pair apply(List<Integer> list) {
- return new Pair(list.get(0), list.get(1));
- }
- }).forEach(System.out::println);
- import java.util.function.IntFunction;
- import java.util.stream.IntStream;
- public class PairFunction implements IntFunction<PairFunction.Pair> {
- public static class Pair {
- private final int first;
- private final int second;
- public Pair(int first, int second) {
- this.first = first;
- this.second = second;
- }
- @Override
- public String toString() {
- return "[" + first + "|" + second + "]";
- }
- }
- private int last;
- private boolean first = true;
- @Override
- public Pair apply(int value) {
- Pair pair = !first ? new Pair(last, value) : null;
- last = value;
- first = false;
- return pair;
- }
- public static void main(String[] args) {
- IntStream intStream = IntStream.of(0, 1, 2, 3, 4);
- final PairFunction pairFunction = new PairFunction();
- intStream.mapToObj(pairFunction)
- .filter(p -> p != null) // filter out the null
- .forEach(System.out::println); // display each Pair
- }
- }
- List<Integer> input = Arrays.asList(0, 1, 2, 3, 4);
- Stream<Pair> pairStream = Streams.zip(input.stream(),
- input.stream().substream(1),
- (a, b) -> new Pair(a, b)
- );
- public static void main(String[] args) {
- Stream<Integer> numbers = IntStream.rangeClosed(0, 4).boxed();
- AtomicInteger counter = new AtomicInteger(Integer.MIN_VALUE);
- List<Pair> collect = numbers.map(n -> {
- int i = counter.getAndSet(n);
- return i == Integer.MIN_VALUE ? null : new Pair(i, n);
- })
- .filter(p -> p != null)
- .collect(toList());
- System.out.println(collect);
- }
- class Pair {
- private int left, right;
- Pair(int left, int right) { this.left = left; this.right = right; }
- @Override public String toString() { return "{" + left + "," + right + '}'; }
- }
- for(int i = 0 ; i < stream.length-1 ; i++)
- {
- Pair pair = new Pair(stream[i], stream[i+1]);
- // then add your pair to an array
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement