CharacterChromosome extends VariableChromosome<CharacterGene> implements
		CharSequence,
		Serializable { public CharacterChromosome map(final Function<? super char[], char[]> f) { requireNonNull(f); final char[] chars = f.apply(toArray()); final var genes = IntStream.range(0, chars.length) .mapToObj(i -> CharacterGene.of(chars[i], _validCharacters)) .collect(ISeq.toISeq()); return newInstance(genes); } protected  CharacterChromosome(
		final ISeq<CharacterGene> genes,
		final IntRange lengthRange
	); @Override char charAt(final int index); @Override CharacterChromosome subSequence(final int start, final int end); @Override CharacterChromosome newInstance(final ISeq<CharacterGene> genes); @Override CharacterChromosome newInstance(); CharacterChromosome map(final Function<? super char[], char[]> f); @Override int hashCode(); @Override boolean equals(final Object obj); @Override String toString(); char[] toArray(final char[] array); char[] toArray(); static CharacterChromosome of(
		final CharSeq validCharacters,
		final IntRange lengthRange
	); static CharacterChromosome of(final IntRange lengthRange); static CharacterChromosome of(
		final CharSeq validCharacters,
		final int length
	); static CharacterChromosome of(final int length); static CharacterChromosome of(
		final String alleles,
		final CharSeq validChars
	); static CharacterChromosome of(final String alleles);  }
@Test public void map() { final var ch1 = CharacterChromosome.of(1000); final var ch2 = ch1.map(CharacterChromosomeTest::uppercase); Assert.assertNotSame(ch2, ch1); Assert.assertEquals(ch2.toArray(), uppercase(ch1.toArray())); }