Intereting Posts
Как идиоматически проверить непустые, непустые строки в Котлин? Модульное тестирование Mockito: при всех вызовах метода класса возвращаем «true» Есть ли накладные расходы для написания библиотеки в Kotlin для Android? Простой и приятный способ увеличить значение null в Kotlin Kotlin: установка частного булева класса Java через класс Data в Котлине. Почему я не могу это сделать? Невозможно подтвердить приостановленный блок, переданный для forEach Посылка: неспособность маршалировать стоимость Тесты Kotlin не работают из командной строки с ClassNotFoundException, но работают с IntelliJ Список Kotlin для EnumMap с суммами Выполнить функцию из строки? Mockito Wanted, но не вызывается Фильтровать подстроку в котлин KotterKnife – не может использовать bindView (R.id.example_id) для некоторых классов Не удается разрешить символ @ReadOnly и @Mutable в компиляции Kotlin 1.1.0 ViewPager во Фрагменте не работает второй раз

Идиоматический способ пролитой последовательности в три списка с использованием Kotlin

Так что, возможно, это больше связано с функциональным программированием, чем с Котлином, я на этом этапе был небольшим знанием, и я написал приложение в Котлине, поэтому кажется справедливым задавать вопрос Котлина как его структуры Котлинса, которые меня интересуют.

У меня есть последовательность элементов, они состоят из трех партий, поэтому поток может выглядеть так:

1,a,+,2,b,*,3,c,&....... 

То, что я хочу сделать, – это пролить это на три списка, в настоящее время я делаю это, разбивая на два списка, один из которых содержит числа и один, который содержит все остальное, затем принимает вторую половину результата, буквы и символы и снова разбивая на буквы и символы, таким образом, я получаю три списка.

Это кажется мне несколько неэффективным, возможно, функциональный подход здесь не самый лучший подход.

Есть ли эффективный способ сделать это, мой выбор, это или цикл for?

благодаря

Вы можете использовать метод groupBy для группировки элементов вашей последовательности по типу элемента:

 val elementsByType = sequence.groupBy { getElementType(it) } 

где getElementType – это функция, возвращающая тип элемента: будь то буква или число или символ. Эта функция может возвращать либо число, например 1, 2, 3, либо значение некоторого перечисления с 3 различными записями.

groupBy возвращает карту из типа элемента в список элементов этого типа.