package au.gov.amsa.geo.adhoc; import java.io.File; import java.text.ParseException; import java.util.Arrays; import au.gov.amsa.geo.distance.OperatorEffectiveSpeedChecker; import au.gov.amsa.geo.model.SegmentOptions; import au.gov.amsa.risky.format.BinaryFixes; import au.gov.amsa.risky.format.Fix; import rx.Observable; import rx.functions.Func2; public class EffectiveSpeedCheckFailures2Main { public static void main(String[] args) throws ParseException { SegmentOptions options = SegmentOptions.builder().acceptAnyFixHours(12L).maxSpeedKnots(50) .build(); tasmania().groupBy(fix -> fix.mmsi()) .flatMap(g -> g.lift(new OperatorEffectiveSpeedChecker(options)) .buffer(2, 1) .filter(list -> list.size() == 2 && list.get(0).isOk() && !list.get(1).isOk()) .doOnNext(list -> { System.out.println(" ok," + list.get(0)); System.out.println("bad," + list.get(1)); })) // count and go .count().toBlocking().single(); } public static Observable<Fix> tasmania() { Long[] vessels = new Long[] { 503433000L, 503432000L, 503087000L }; return Observable.from(Arrays.asList(vessels)) .map(mmsi -> new File("/media/an/binary-fixes-5-minute/2015/" + mmsi + ".track")) .flatMap(file -> BinaryFixes.from(file)) .toSortedList(new Func2<Fix, Fix, Integer>() { @Override public Integer call(Fix a, Fix b) { return Long.compare(a.time(), b.time()); } }).flatMapIterable(x -> x); } }