小编Tar*_*deX的帖子

将Java 8 Optionals与条件AND结合使用

我的问题是我有两个或更多包含不同类型的Optionals.我想执行一个只有在所有选项都不为空时才能执行的操作.

目前我这样做:

    Optional<PatientCase> caseOptional = patientCaseRepository.findOneById(caseId);
    Optional<User> userOptional = userRepository.findOneById(caseId);

    if(userOptional.isPresent() && caseOptional.isPresent()) {
        caseOptional.get().getProcess().setDesigner(userOptional.get());
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,if条件感觉不对.我知道可以使用orElse链接Optionals.但在我的情况下,我不想要一个合乎逻辑的Else.有没有办法创建和AND运算符,以组合两个或更多类似于这个PSEUDO代码的Optionals?

caseOptional.and.userOptional.ifPresent((theCase,user) -> //Perform Stuff);
Run Code Online (Sandbox Code Playgroud)

java optional logical-operators java-8 java-stream

6
推荐指数
2
解决办法
4689
查看次数

如何使用ReactiveX Observables/Subjects处理进度更新?

我正在编写一个Angular应用程序,它使用ReactiveX API来处理异步操作.我之前在Android项目中使用过API,我非常喜欢它如何简化并发任务处理.但有一件事我不确定如何以正确的方式解决.

如何从正在进行的任务中更新观察者?在这种情况下的任务将花费时间来加载/创建复杂/大型对象,并且我能够返回中间进度,但不能返回对象本身.observable只能返回一个dataType.因此,我知道两种可能性.

  1. 创建一个具有进度字段和数据字段的对象.可以使用Observable.onNext(object)返回此对象.progress字段将在每个onNext上更新,而data字段为空,直到最后一个onNext,这将把它设置为加载的值.

  2. 创建两个可观察对象,一个数据可观察对象和一个进度可观察对象.观察者可以订阅进度更新可观察的进度以及最终加载/创建数据时可通知的数据.这些也可以选择性地压缩在一起进行一次订阅.

我使用了这两种技术,它们都有效,但我想知道是否有统一的标准,干净的方式,如何解决这个任务.当然,它也可以是一个全新的.我为每个解决方案开放.

progress observable rxjs rx-java reactivex

5
推荐指数
1
解决办法
2138
查看次数

Spring Boot Websocket在SockJS客户端测试中引发"拒绝连接"

我正在开发一个Spring Boot Server Project,它提供了简单的REST资源,直到现在.为了将通知推送到客户端,我想添加一个websocket连接.为了测试这种连接,我使用基于本教程的SockJS客户端编写了一个集成测试:

http://rafaelhz.github.io/testing-websockets/

问题是Connection被拒绝,并出现以下错误:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:9090/websocket/info": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
Run Code Online (Sandbox Code Playgroud)

我的Websocket配置如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry
                .addEndpoint("/websocket")
                .setAllowedOrigins("*")
                .withSockJS();
    }

}
Run Code Online (Sandbox Code Playgroud)

我可以看到套接字端点映射到日志中:

2017-07-14 15:22:59.561  INFO 13765 --- [           main] o.s.w.s.s.s.WebSocketHandlerMapping      : Mapped URL path [/websocket/**] …
Run Code Online (Sandbox Code Playgroud)

websocket sockjs spring-boot connection-refused

3
推荐指数
1
解决办法
1966
查看次数