要求:给定Flux中的服务器列表,如果存在则返回本地服务器,如果不存在则返回DEV服务器,并且必须以非阻塞方式完成。
我不知道如何使用Flux。方法,因为它只允许您一次检查一个元素,并且要执行过滤,您必须提前知道整个列表中的内容。这对于阻塞代码来说很容易,因为我只需提前迭代整个列表以确定它是否具有LOCAL或DEV实例等。我不知道如何在Flux中做到这一点。
服务器类:
class Server {
public String environment;
public String hostName;
public Server(String environment, String hostName) {
this.environment = environment;
this.hostName = hostName;
}
}
筛选方法:
public Flux<Server> filterServersLocalOrDev(Flux<Server> serverFlux) {
Flux<Server> filteredServers = // do filtering here..how to?
return filteredServers;
}
演示调用代码:
Server server1 = new Server("DEV", "dev1.somecompany.com");
Server server2 = new Server("TEST", "test1.somecompany.com");
Server server3 = new Server("DEV", "dev2.somecompany.com");
Server server4 = new Server("LOCAL", "localhost");
Flux<Server> serverFlux = Flux.just(server1, server2, server3, server4);
Flux<Server> filteredServerFlux = filterServersLocalOrDev(serverFlux);
// filteredServerFlux should only contain LOCAL if it is
// present OR the two DEV servers if there is no LOCAL
可以使用filter和switchIfEmpty。如果存在,它将返回本地服务器,否则返回开发服务器,如
public Flux<Server> filterServersLocalOrDev(Flux<Server> serverFlux) {
Flux<Server> filteredServers = serverFlux
.filter(s -> "LOCAL".equals(s.environment))
.switchIfEmpty(serverFlux.filter(s -> "DEV".equals(s.environment)));
return filteredServers;
}