簡體   English   中英

如何使用無限的java.util.stream.Stream?

[英]How to use an infinite java.util.stream.Stream?

說我有一個無限的流:

Stream<Socket> stream = Stream.generate(() -> {
    try {
        return serverSocket.accept();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
});

我希望能夠使用它像這樣:

stream.forEach(socket -> {
    new Thread(() -> {
        socket.getOutputStream().write("Hi there, client.");
    });
});

但這似乎不起作用,這可能是因為我誤解了Java 8 Streams的一個關鍵方面。 我究竟做錯了什么?

@Andres Riofrio的答案:

stream
  .<Runnable>map(socket -> () ->
    socket
      .getOutputStream()
      .write("Hi there, client.")
  ) // create a Runnable that writes a string to the socket's output stream
  .map(Thread::new) // transform each Runnable into a Thread
  .forEach(Thread::start) // start each Thread
;

實際上,我的問題是我忘了啟動線程:

stream.forEach(socket -> {
    new Thread(() -> {
        socket.getOutputStream().write("Hi there, client.");
    }).start();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM