Ho una funzione Scala foo(bs : Stream[Bar]) : Bat
che devo chiamare dal codice Java. Come posso creare il flusso "bs" (Stream[Bar]
) in Java e generare generosamente i suoi oggetti Bar?Come istanziare e popolare un flusso Scala in Java?
risposta
A seconda di ciò che deve essere nel flusso, potrebbe essere più semplice per creare un java.util.Iterator
e poi convertire ad un Stream
tramite un scala.collection.Iterator
:
import scala.collection.JavaConverters;
import scala.collection.immutable.Stream;
...
List<String> list = new ArrayList<String>();
\\ Fill the list somehow...
Iterator<String> it = list.iterator();
Stream<String> stream = JavaConverters.asScalaIteratorConverter(it)
.asScala().toStream();
Ovviamente l'iteratore non deve provenire da una raccolta: possiamo facilmente creare uno stream infinito implementando il nostro iteratore:
Non è bello come qualcosa come Stream.iterate(0)(_ + 1).map(_.toString)
, ma funziona.
Molto facile da usare. Grazie! –
Hai provato
scala.collection.immutable.Stream bs = new scala.collection.immutable.Stream()
?
Ho modificato la domanda per cercare di chiarire che sto cercando un esempio completo di generazione di stream basata su Java (non solo istanza) –
Il modo migliore è utilizzare uno degli stabilimenti disponibili su Stream
companion di oggetti. Per il più utile, è necessario implementare anche lo Function1
estendendo il numero AbstractFunction1
.
Ecco un esempio:
import scala.collection.immutable.Stream;
import scala.runtime.AbstractFunction1;
public class Ex {
public Stream<Integer> stream = Stream.iterate(0, new Increment());
}
class Increment extends AbstractFunction1<Integer, Integer> {
public Integer apply(Integer v1) {
return v1 + 1;
}
}
Ho accettato la risposta di @Travis perché è la risposta più semplice al mio particolare problema, ma questa risposta è molto utile per il caso più generale. –
So che stavi cercando per il flusso di scala, ma c'è java funzionale troppo: http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/data/Stream.html
- 1. come istanziare l'unità in Scala?
- 2. Come istanziare un oggetto in java?
- 3. come convertire un Java Stream per una Scala flusso
- 4. Istanziare un oggetto javascript e popolare le sue proprietà in una singola riga
- 5. Come implementare un flusso Java?
- 6. Flusso Java Gestione e flusso applicazioni
- 7. Come popolare java.util.HashMap al volo dal codice Scala?
- 8. Java: istanziare un enum utilizzando la riflessione
- 9. Come convalidare e istanziare Java Locale da stringhe?
- 10. istanziare una classe Scala da Java, e utilizzare i parametri di default del costruttore
- 11. Scala di riflessione per istanziare scala.slick.lifted.TableQuery
- 12. Istanziare il tipo generico in java
- 13. Scala flusso confusione
- 14. Scala e Java BigDecimal
- 15. come popolare un ViewModel in ASP.NET MVC3
- 16. Scala, Java e l'uguaglianza
- 17. come popolare un ComboBox in XAML
- 18. Come istanziare un ArrayList <?> e aggiungere un elemento tramite riflessione con Java?
- 19. Come istanziare un Singleton più volte?
- 20. Come istanziare la classe interna con la riflessione in Java?
- 21. collezioni Scala diagramma di flusso
- 22. Come istanziare NSViewController in Swift?
- 23. Come mappare un flusso di flussi in Java?
- 24. XMLStreamReader e un flusso reale
- 25. Flusso di lavoro di sviluppo Scala (IDE)
- 26. istanziare generico
- 27. Getter e setter Scala in classe Java
- 28. Come istanziare e inizializzare un oggetto dinamico nell'albero delle espressioni?
- 29. come convertire un flusso di input per un oggetto Java
- 30. Come creare un flusso Java 8 da un iteratore?
Da dove viene quel flusso viene? Ce l'hai in una Collezione Java, la riceverai attraverso l'evento, cosa? Senza saperlo, è impossibile affermare quale sarebbe la migliore soluzione al riguardo. –
Nel mio problema del mondo reale, ho un vettore Java. Sarei interessato a capire cosa/perché farei qualcosa di diverso se fosse generato da un evento. –
Per il tuo problema @Travis risposta è la strada da percorrere. Generare da un evento è più difficile - un buon esempio è la libreria sys.process di Scala, che può generare un 'Stream' dal' OutputStream' di un processo in esecuzione. –