Nevím, jestli oficiálně něco takového již existuje, ale alespoň já jsem tento druh problému takhle nazval 🙂 . Opět jsem nedávno narazil na problém lehce bizarního parsování dat. Řekněme, že máte list řetězců, který je ve formátu „název skupiny“, pak následuje libovolný počet prvků, pak další název skupiny atd … a chcete tento list grupovat právě podle těchto skupin, kde zároveň jediné, co znáte předem, jsou jména těchto skupin, která jsou pevně daná s tím, že některé se v listu vyskytovat můžou, anebo nemusí. Pojďme si trochu potrápit hlavy a za předpokladu, že tento list není příliš velký, zkusme daný problém vyřešit s pomocí ne-až-tolik-známých operátorů, jako jsou dropWile(), drop() a takeWhile():

        val input = listOf(
                "Group1",
                "1",
                "2",
                "3",
                "Group2",
                "4",
                "5",
                "6",
                "7",
                "Group3",
                "8",
                "9"
        )

        val knownGroupNames = listOf("Group1", "Group2", "Group3")

        val groupsMap = knownGroupNames.map { groupName ->
            val groupItems = input.dropWhile { it != groupName }
                    .drop(1)
                    .takeWhile { it !in knownGroupNames }

            Pair(groupName, groupItems)
        }
        .toMap()

        groupsMap.forEach { group, items -> println("$group contains: ${items.joinToString(", ")}") }

Výstupem je:
Group1 contains: 1, 2, 3
Group2 contains: 4, 5, 6, 7
Group3 contains: 8, 9

Tak co, rozlouskli jste to? 🙂