2017-12-28 29 views
1

나는 반응성 스트림을 학습하고 다음과 같이 두 플럭스를 결합하려고합니다.zip을 사용하여 두 플럭스를 결합 할 때 오류가 발생했습니다

 List<Integer> elems = new ArrayList<>(); 
     Flux.just(10,20,30,40) 
      .log() 
      .map(x -> x * 2) 
      .zipWith(Flux.range(0, Integer.MAX_VALUE), 
        (two, one) -> String.format("First : %d, Second : %d \n", one, two)) 
      .subscribe(elems::add); 

및 구독 호출, 나는 다음과 같은 오류 있어요 :

Multiple markers at this line 
    - The method subscribe(Consumer<? super String>) in the type Flux<String> is not applicable for the arguments 
    (elems::add) 
    - The type List<Integer> does not define add(String) that is applicable here 

을하고 난 문제 해결하기 위해 다음과 같은 제안을 가지고 :

enter image description here

을 그러나 이러한 대안 없음 일했다. 제안 사항,이 문제를 해결하는 방법은 무엇입니까?

답변

2

간혹 메소드 참조를 사용하면 명백한 것을 간과 할 수 있습니다. 나는 익명의 클래스를 사용하여 함수를 다시 작성했다.

List<Integer> elems = new ArrayList<>(); 
    Flux.just(10,20,30,40) 
     .log() 
     .map(x -> x * 2) 
     .zipWith(Flux.range(0, Integer.MAX_VALUE), 
      (two, one) -> String.format("First : %d, Second : %d \n", one, two)) 
     .subscribe(new Consumer<String>() { 
      @Override 
      public void accept(String s) { 

      } 
     }); 

이 익명 클래스를 만들기 위해 내 IDE (intellij)의 코드 완성을 사용했습니다. 당신이 볼 수 있듯이이 소비자의 입력은 그래서 당신은 당신이 사용 뭘 하려는지입니다 이는 List<Integer>String을 추가 할 수 있다는 불평

String.format("First : %d, Second : %d \n", one, two) 

에서 오는하는하는 String입니다 elems:add