/** * Creates and returns a traverser which traverses matched items on the supplied matcher. * Also applies the supplied mapping function to the matched items. */ private static <R> Traverser<R> traverseMatcher(Matcher m, Function<Matcher, R> mapperFn) { AppendableTraverser<R> traverser = new AppendableTraverser<>(1); while (m.find()) { traverser.append(mapperFn.apply(m)); } return traverser; } }
Traverser<Object> flatMapEvent(long now, @Nullable T event, int partitionIndex, long nativeEventTime) { assert traverser.isEmpty() : "the traverser returned previously not yet drained: remove all " + "items from the traverser before you call this method again."; if (event != null) { if (timestampFn == null && nativeEventTime == NO_NATIVE_TIME) { throw new JetException("Neither timestampFn nor nativeEventTime specified"); } long eventTime = timestampFn == null ? nativeEventTime : timestampFn.applyAsLong(event); handleEventInt(now, partitionIndex, eventTime); traverser.append(wrapFn.apply(event, eventTime)); } else { handleNoEventInt(now); } return traverser; }
/** * Returns a traverser which flat maps each tweet to (coin, tweet) pairs * by finding coins relevant to this tweet * * @param text content of the tweet */ private static Traverser<? extends Entry<String, String>> flatMapToRelevant(String text) { AppendableTraverser<Entry<String, String>> traverser = new AppendableTraverser<>(4); for (String coin : CoinDefs.COIN_MAP.keySet()) { for (String keyword : CoinDefs.COIN_MAP.get(coin)) { if (text.contains(keyword)) { traverser.append(entry(coin, text)); } } } return traverser; }
private static Traverser<? extends TimestampedEntry<String, String>> flatMapToRelevant(TimestampedEntry<Object, String> e) { AppendableTraverser<TimestampedEntry<String, String>> traverser = new AppendableTraverser<>(4); String text = e.getValue(); for (String coin : CoinDefs.COIN_MAP.keySet()) { for (String keyword : CoinDefs.COIN_MAP.get(coin)) { if (text.contains(keyword)) { traverser.append(new TimestampedEntry<>(e.getTimestamp(), coin, e.getValue())); } } } return traverser; }