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

标签 java functional-programming java-8 infinite java-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
;

关于java - 如何使用无限的java.util.stream.Stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573274/

相关文章:

java - 将输出发送到 play 2.0 中的 websocket

java - JPA 2.1 属性转换器转换 enum 仍插入 int

c# - C#中的IF实现

haskell - 为什么 "map (filter fst)"的类型是 "[[(Bool, a)]] -> [[(Bool, a)]]"?

java - 安卓语音合成 : Speaking Long text

java - JPA 嵌套映射到没有基表的 View

language-agnostic - 定界和非定界延续之间的区别

java-8 - Jahia 7 与 Oracle JDK 8 兼容吗

java-8 - 如何将 java.util.Optional<Something> 映射到某物?在 Kotlin

java - 在接口(interface)中使用静态单例 getter 是一种不好的做法吗?