private Collection<Spliterator<EvolutionResult<G, C>>> spliterators(
		final EvolutionInit<G> init,
		final AtomicReference<EvolutionStart<G, C>> other
	) {
		final Collection<Spliterator<EvolutionResult<G, C>>> result;
		if (_engines.isEmpty()) {
			result = Collections.emptyList();
		} else if (_engines.size() == 1) {
			result = List.of(
				_engines.get(0)
					.stream(init)
					.peek(er -> other.set(er.toEvolutionStart()))
					.spliterator()
			);
		} else {
			final List<Spliterator<EvolutionResult<G, C>>> concat =
				new ArrayList<>();

			concat.add(
				_engines.get(0)
					.stream(init)
					.peek(er -> other.set(er.toEvolutionStart()))
					.spliterator()
			);
			concat.addAll(
				_engines.subList(1, _engines.size()).stream()
					.map(engine -> engine
						.stream(other::get)
						.peek(er -> other.set(er.toEvolutionStart())))
					.map(BaseStream::spliterator)
					.toList()
			);

			result = concat;
		}

		return result;
	}
Create a new concatenating evolution engine with the given list of engines.

@param engines the engines which are concatenated to <em>one</em> engine
@throws NullPointerException if the {@code engines} or one of its
        elements is {@code null}
jenetics.ext/src/main/java/io/jenetics/ext/engine/ConcatEngine.java