List of usage examples for java.util.stream Stream spliterator
Spliterator<T> spliterator();
From source file:com.wrmsr.kleist.util.Itertools.java
public static <T> Stream<EnumeratedElement<T>> enumerate(Stream<T> stream) { return StreamSupport.stream(enumerate(stream.spliterator()), false); }
From source file:com.wrmsr.kleist.util.Itertools.java
public static <L, R> Stream<Pair<L, R>> zip(Stream<L> left, Stream<R> right) { return StreamSupport.stream(zip(left.spliterator(), right.spliterator()), false); }
From source file:com.github.steveash.guavate.Guavate.java
/** * Creates a stream that wraps a stream with the index. * <p>//from w w w .j ava 2 s .c o m * Each input object is decorated with an {@link ObjIntPair}. * The {@code int} is the index of the element in the stream. * @param <T> the type of the stream * @param stream the stream to index * @return a stream of pairs, containing the element and index */ public static <T> Stream<ObjIntPair<T>> zipWithIndex(Stream<T> stream) { Spliterator<T> split1 = stream.spliterator(); Iterator<T> it1 = Spliterators.iterator(split1); Iterator<ObjIntPair<T>> it = new Iterator<ObjIntPair<T>>() { int index = 0; @Override public boolean hasNext() { return it1.hasNext(); } @Override public ObjIntPair<T> next() { return ObjIntPair.of(it1.next(), index++); } }; Spliterator<ObjIntPair<T>> split = Spliterators.spliterator(it, split1.getExactSizeIfKnown(), split1.characteristics()); return StreamSupport.stream(split, false); }
From source file:de.tudarmstadt.lt.seg.app.Segmenter.java
public static void split_and_tokenize(Reader reader, String docid, ISentenceSplitter sentenceSplitter, ITokenizer tokenizer, int level_filter, int level_normalize, boolean merge_types, boolean merge_tokens, String separator_sentence, String separator_token, String separator_desc, PrintWriter writer) { try {/*from w w w.j a va 2 s. co m*/ final StringBuffer buf = new StringBuffer(); // used for checking of stream is empty; take care when not running sequentially but in parallel! sentenceSplitter.init(reader).stream().sequential().forEach(sentence_segment -> { if (DEBUG) { writer.format("%s%s", docid, separator_desc); writer.println(sentence_segment.toString()); writer.print(separator_sentence); } if (sentence_segment.type != SegmentType.SENTENCE) return; tokenizer.init(sentence_segment.asString()); Stream<String> tokens = null; if (DEBUG) tokens = tokenizer.stream().map(x -> x.toString() + separator_token); else tokens = StreamSupport.stream(tokenizer .filteredAndNormalizedTokens(level_filter, level_normalize, merge_types, merge_tokens) .spliterator(), false).map(x -> x + separator_token); Spliterator<String> spliterator = tokens.spliterator(); tokens = StreamSupport.stream(spliterator, false); buf.setLength(0); boolean empty = !spliterator.tryAdvance(x -> { buf.append(x); }); if (empty) return; synchronized (writer) { // writer.write(Thread.currentThread().getId() + "\t"); writer.format("%s%s", docid, separator_desc); writer.print(buf); tokens.forEach(writer::print); writer.print(separator_sentence); writer.flush(); } }); } catch (Exception e) { Throwable t = e; while (t != null) { System.err.format("%s: %s%n", e.getClass(), e.getMessage()); t = e.getCause(); } } }
From source file:com.github.steveash.guavate.Guavate.java
/** * Creates a stream that combines two other streams, continuing until either stream ends. * <p>/*from w w w .jav a 2 s.co m*/ * The combiner function is called once for each pair of objects found in the input streams. * @param <A> the type of the first stream * @param <B> the type of the second stream * @param <R> the type of the resulting stream * @param stream1 the first stream * @param stream2 the first stream * @param zipper the function used to combine the pair of objects * @return a stream of pairs, one from each stream */ private static <A, B, R> Stream<R> zip(Stream<A> stream1, Stream<B> stream2, BiFunction<A, B, R> zipper) { // this is private for now, to see if it is really needed on the API // it suffers from generics problems at the call site with common zipper functions // as such, it is less useful than it might seem Spliterator<A> split1 = stream1.spliterator(); Spliterator<B> split2 = stream2.spliterator(); // merged stream lacks some characteristics int characteristics = split1.characteristics() & split2.characteristics() & ~(Spliterator.DISTINCT | Spliterator.SORTED); long size = Math.min(split1.getExactSizeIfKnown(), split2.getExactSizeIfKnown()); Iterator<A> it1 = Spliterators.iterator(split1); Iterator<B> it2 = Spliterators.iterator(split2); Iterator<R> it = new Iterator<R>() { @Override public boolean hasNext() { return it1.hasNext() && it2.hasNext(); } @Override public R next() { return zipper.apply(it1.next(), it2.next()); } }; Spliterator<R> split = Spliterators.spliterator(it, size, characteristics); return StreamSupport.stream(split, false); }