Size: a a a

Kotlin Community

2020 April 07

VD

Vitaly Demidenko in Kotlin Community
kotlin правда это не умеет?
источник

ch

central hardware in Kotlin Community
Vitaly Demidenko
kotlin правда это не умеет?
стирание типов не не слышали
источник

SB

Sergey Barmin in Kotlin Community
а кто умеет?
источник

AN

Alexander Nozik in Kotlin Community
конкретно так почти никто не умеет
источник

VP

Vladimir Petrakovich in Kotlin Community
Sergey Barmin
а кто умеет?
C++
источник

AN

Alexander Nozik in Kotlin Community
Стирание типов тут не при чем
источник

SB

Sergey Barmin in Kotlin Community
конструктор же какой угодно может быть, плюсам на это пофиг?
источник

VP

Vladimir Petrakovich in Kotlin Community
Sergey Barmin
конструктор же какой угодно может быть, плюсам на это пофиг?
Плюсы будут ругаться в месте использования, там же шаблоны
источник

ПГ

Павло Гриник in Kotlin Community
Oleksii Skakun
Думаю как это решить)
channelFlow попробуй
источник

OS

Oleksii Skakun in Kotlin Community
Насчет кода, вот тестовый вариант который заработал:

fun <T> Flow<T>.timedBuffer(millis:Long):Flow<List<T>> = channelFlow {
   
val list = arrayListOf<T>()

   launch {
       
collect { list.add(it) }
   }

   
launch {
       
while(true) {
           delay(millis)

           if(list.isNotEmpty()){
               send(ArrayList(list))
               list.clear()
           }
       }
   }
}
источник

OS

Oleksii Skakun in Kotlin Community
Ты прямо рядом сидишь и прогаешь))
источник

(

( in Kotlin Community
Vitaly Demidenko
kotlin правда это не умеет?
а если там интерфейс будет?
источник

OS

Oleksii Skakun in Kotlin Community
Я как раз с ними сделал
источник

VP

Vladimir Petrakovich in Kotlin Community
Oleksii Skakun
Насчет кода, вот тестовый вариант который заработал:

fun <T> Flow<T>.timedBuffer(millis:Long):Flow<List<T>> = channelFlow {
   
val list = arrayListOf<T>()

   launch {
       
collect { list.add(it) }
   }

   
launch {
       
while(true) {
           delay(millis)

           if(list.isNotEmpty()){
               send(ArrayList(list))
               list.clear()
           }
       }
   }
}
Непотокобезопасненько
источник

ПГ

Павло Гриник in Kotlin Community
Oleksii Skakun
Насчет кода, вот тестовый вариант который заработал:

fun <T> Flow<T>.timedBuffer(millis:Long):Flow<List<T>> = channelFlow {
   
val list = arrayListOf<T>()

   launch {
       
collect { list.add(it) }
   }

   
launch {
       
while(true) {
           delay(millis)

           if(list.isNotEmpty()){
               send(ArrayList(list))
               list.clear()
           }
       }
   }
}
боюсь, он никогда не закончится
источник

OS

Oleksii Skakun in Kotlin Community
Я тоже так думаю, сейчас думаю как это правильно сделать
источник

ПГ

Павло Гриник in Kotlin Community
нужно явно канал закрыть
источник

ПГ

Павло Гриник in Kotlin Community
как вариант - использовать флаг (не забываю о потокобезопасности)
источник

AN

Alexander Nozik in Kotlin Community
да, я не учел ограничения Flow
источник

VP

Vladimir Petrakovich in Kotlin Community
Отменять scope после collect - самое то
источник