channel.of(
        tuple('chr1', ['/path/to/region1_chr1.vcf', '/path/to/region2_chr1.vcf']),
        tuple('chr2', ['/path/to/region1_chr2.vcf', '/path/to/region2_chr2.vcf', '/path/to/region3_chr2.vcf']),
    )
    .flatMap { chr, vcfs ->
        vcfs.collect { vcf ->
            tuple(chr, vcfs.size(), vcf)    // preserve group size
        }
    }
    .view { v -> "scattered: ${v}" }
    .groupBy()
    .map { key, values -> tuple(key, values.toSorted()) }
    .view { v -> "gathered: ${v}" }