2016-04-27 12 views
10

Java 8 Gli stream sono potenti ma quando il parallelismo non è necessario Kotlin Sequence sembra essere più semplice da utilizzare.Come convertire java.util.stream.Stream <Something> in kotlin.Sequence <Something>

C'è un modo per convertire uno stream.sequencial() in una sequenza?

+0

un esempio di questo è anche menzionato alla voce "Staying pigro" parte di http : //stackoverflow.com/questions/35721528/how-can-i-call-collectcollectors-tolist-on-a-java-8-stream-in-kotlin/35722167#35722167 –

risposta

13

È possibile ottenere un iteratore da un ruscello e poi avvolgere l'iteratore in una sequenza:

Sequence { stream.iterator() } 
+1

Grande! Vedo che c'è anche Iterator . AsSequence(), quindi posso dire: stream.iterator(). AsSequence() – atok

+3

Sì, è quasi la stessa cosa. La differenza qui è quando la funzione 'iterator()' viene invocata su Stream, immediatamente ('asSequence()') o pigramente ('Sequence {}'). – Ilya

0

Kotlin ha un metodo di estensione asSequence() per convertire un flusso di Java per un Kotlin sequenza. Nella mia esperienza non era rilevabile fino a quando ho aggiunto una dichiarazione di importazione:

import kotlin.streams.* 

quindi è sufficiente utilizzare come previsto:

val seq = stream.asSequence() 
Problemi correlati