Java 如何将新对象添加到现有流中?

Java 如何将新对象添加到现有流中?,java,stream,reactive-programming,project-reactor,Java,Stream,Reactive Programming,Project Reactor,假设我已经有了一个反应流,现在我想在这个现有流中再添加一个对象。我该怎么做 这是我找到的,这是路吗 import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import reactor.core.publisher.Flux; import reactor.core.publisher.FluxSink; /** * Created by ton on 10/11/16.

假设我已经有了一个反应流,现在我想在这个现有流中再添加一个对象。我该怎么做

这是我找到的,这是路吗

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxSink;

/**
 * Created by ton on 10/11/16.
 */
public class Example {

    private List<FluxSink<String>> handlers = new ArrayList<>();

    public Flux<String> getMessagesAsStream() {
        Flux<String> result = Flux.create(sink -> {
                handlers.add(sink);
            sink.setCancellation(() -> handlers.remove(sink));
        });

        return result;
    }

    public void handleMessage(String message) {
        handlers.forEach(han -> han.next(message));
    }

    public static void main(String[] args) {
        Example example = new Example();
        example.getMessagesAsStream().subscribe(req -> System.out.println("req = " + req));
        example.getMessagesAsStream().subscribe(msg -> System.out.println(msg.toUpperCase()));
        example.handleMessage("een");
        example.handleMessage("twee");
        example.handleMessage("drie");
    }
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.function.Consumer;
导入reactor.core.publisher.Flux;
导入reactor.core.publisher.FluxSink;
/**
*由ton于2016年11月10日创建。
*/
公开课范例{
私有列表处理程序=新的ArrayList();
公共流量getMessagesAsStream(){
通量结果=通量。创建(接收器->{
添加(sink);
setCancellation(()->handlers.remove(sink));
});
返回结果;
}
公共无效handleMessage(字符串消息){
handlers.forEach(han->han.next(message));
}
公共静态void main(字符串[]args){
示例=新示例();
示例.getMessagesAsStream().subscribe(req->System.out.println(“req=”+req));
示例.getMessagesStream().subscribe(msg->System.out.println(msg.toUpperCase());
例如,handleMessage(“een”);
例如,handleMessage(“twee”);
例如,handleMessage(“drie”);
}
}

假设这是您现有的流:

Flux<Integer> existingStream = Flux.just(1, 2, 3, 4);

这将产生一个类似的流,但是
5
元素可能出现在结果通量中的任何位置。

但这将创建一个新通量。如果我想将对象添加到已被其他对象使用的通量中,该怎么办?您只能按上述方式“合成”它们。据我所知,你想做的事是不可能的。可能有一些方法可以做到这一点,但我确信它不打算这样做。我使用FluxSink设置了类似于rhea-0b1的代码,它似乎工作正常。我们是否应该意识到这方面存在一些问题?
Flux<Integer> appendObjectToStream = Flux.concat(existingStream, Flux.just(5));
Flux<Integer> mergeObjectWithStream = Flux.merge(existingStream, Flux.just(5));