private Spliterator<EvolutionResult<G, C>> generate( final Supplier<EvolutionStart<G, C>> start, final EvolutionResult<G, C> result ) { final EvolutionStart<G, C> es = result == null ? start.get() : result.toEvolutionStart(); return _engine.apply(result) .stream(es) .spliterator(); }
private Spliterator<EvolutionResult<G, C>> generate( final EvolutionInit<G> init, final EvolutionResult<G, C> result ) { return result == null ? _engine.apply(null) .stream(init) .spliterator() : _engine.apply(result) .stream(result.toEvolutionStart()) .spliterator(); }
_engines.get(0) .stream(init) .peek(er -> other.set(er.toEvolutionStart())) .spliterator() ); _engines.get(0) .stream(init) .peek(er -> other.set(er.toEvolutionStart())) .spliterator() ); .map(engine -> engine .stream(other::get) .peek(er -> other.set(er.toEvolutionStart()))) .map(BaseStream::spliterator) .collect(Collectors.toList())
@Override public EvolutionStream<G, C> stream(final Supplier<EvolutionStart<G, C>> start) { final AtomicReference<EvolutionStart<G, C>> other = new AtomicReference<>(null); return new EvolutionStreamImpl<G, C>( new ConcatSpliterator<>( _engines.stream() .map(engine -> engine .stream(() -> start(start, other)) .peek(result -> other.set(result.toEvolutionStart()))) .map(BaseStream::spliterator) .collect(Collectors.toList()) ), false ); }
private Supplier<Spliterator<EvolutionResult<G, C>>> toSpliterator( final EvolutionStreamable<G, C> engine, final EvolutionInit<G> init, final AtomicReference<EvolutionStart<G, C>> other, final AtomicBoolean first ) { return () -> { if (first.get()) { first.set(false); return engine.stream(init) .peek(result -> other.set(result.toEvolutionStart())) .spliterator(); } else { return engine.stream(other::get) .peek(result -> other.set(result.toEvolutionStart())) .spliterator(); } }; }
private Supplier<Spliterator<EvolutionResult<G, C>>> toSpliterator( final EvolutionStreamable<G, C> engine, final Supplier<EvolutionStart<G, C>> start, final AtomicReference<EvolutionStart<G, C>> other ) { return () -> engine.stream(() -> start(start, other)) .peek(result -> other.set(result.toEvolutionStart())) .spliterator(); }
@Test public void concat1a() { final EvolutionStream<IntegerGene, Integer> stream = ConcatEngine.of(streamable(1)) .stream(() -> EvolutionStreams.result(5).toEvolutionStart()); final int[] array = stream .mapToInt(r -> r.getGenotypes().get(0).getGene().intValue()) .toArray(); Assert.assertEquals(array, new int[]{6}); }
@Test public void concat1b() { EvolutionInit<IntegerGene> init = EvolutionInit.of( EvolutionStreams.result(5) .toEvolutionStart() .getPopulation().stream() .map(Phenotype::getGenotype) .collect(ISeq.toISeq()), 1 ); final EvolutionStream<IntegerGene, Integer> stream = ConcatEngine.of(streamable(1)) .stream(init); final int[] array = stream .mapToInt(r -> r.getGenotypes().get(0).getGene().intValue()) .toArray(); Assert.assertEquals(array, new int[]{6}); }