Разбивая набор на меньшие наборы - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть набор из более чем 40 000 предметов, и я хочу разбить его на несколько наборов по 5000 предметов в каждом, потому что Room не позволяет мне использовать набор из 5 041 предметов одновременно в качестве аргумента.

Как мне это сделать?

fun breakDownSet(set: Set<String>) : List<Set<String>> {
    val sets = ArrayList<Set<String>>()
    // TODO

    return sets
}

Ответы [ 2 ]

4 голосов
/ 25 апреля 2020

Вы можете использовать chunked.

fun breakDownSet(set: Set<String>): List<Set<String>> = set.chunked(5000) { it.toSet() }

Это разделит ваш набор на несколько наборов, содержащих не более 5000 предметов в каждом.

1 голос
/ 25 апреля 2020

Извините, не знаю Kotlin, так что вот Java версия. Вам должно быть легко конвертировать в Kotlin.

static List<Set<String>> breakDownSet(Set<String> set, int size) {
    List<String> list = new ArrayList<>(set);
    List<Set<String>> result = new ArrayList<>();
    for (int i = 0; i < list.size(); i += size)
        result.add(new HashSet<>(list.subList(i, Math.min(i + size, list.size()))));
    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...