2017-03-27 12 views
0

RxScala 응용 프로그램에서 카프카에서 메시지를 소비하고 동적 크기의 슬라이딩 윈도우에서 메시지를 처리하고 싶습니다. 즉, 생성 된 모든 메시지를 그룹으로 묶고 싶습니다. 같은 2 초 안에 RxScala는 내가 아는 한이 종류의 연산자를 제공하지 않습니다. 이 저장소 (https://github.com/davidmoten/rxjava-extras)는 "toListWhile"기능을 Java 코드 형태로 제공합니다.RxScala 응용 프로그램에서 Java 라이브러리 (rxjava-extras) 코드를 호출하십시오.

이 필요한 함수를 호출하는 단순화 된 시도는 실패

import com.github.davidmoten.rx.Transformers 
import rx.functions.Func1 
import rx.lang.scala.JavaConversions._ 
import rx.lang.scala.Observable 

val o = Observable.from(List(1, 2, 3, 4, 5, 6)) 

val predicate = new Func1[java.lang.Integer, java.lang.Boolean] { 
    override def call(t: Integer): Boolean = true 
} 

val p = o.compose(Transformers.toListWhile(predicate)) 

입니다 나는 점점 오전 오류 :

Error:(75, 45) type mismatch; 
found : rx.functions.Func1[Integer,Boolean] 
required: rx.functions.Func1[_ >: _$7, Boolean] where type _$7 <: Int 
Note: Integer <: Any, but Java-defined trait Func1 is invariant in type T. 
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10) 
val p = o.compose(Transformers.toListWhile(predicate)) 
             ^

은 어떤 하나 스칼라에서 그 코드를 호출하여 제발 도와 주 시겠어요? 감사! 그들이 서로 전환 비록

용액

import java.lang.Boolean 

import com.github.davidmoten.rx.Transformers 
import rx.functions.Func1 
import rx.lang.scala.JavaConversions._ 
import rx.lang.scala.Observable 

val o = Observable.from(List[java.lang.Integer](1, 2, 3, 4, 5, 6)) 

val predicate = new Func1[java.lang.Integer, java.lang.Boolean] { 
    override def call(t: Integer): Boolean = true 
} 

val p = o.compose[java.util.List[java.lang.Integer]](Transformers.toListWhile(predicate)) 

답변

0

java.lang.IntegerInt는 다른 유형이다. 하나

val o = Observable.from(List[java.lang.Integer](1, 2, 3, 4, 5, 6)) 

또는

val predicate = new Func1[Int, java.lang.Boolean] ... 

첫 번째는 일을 확실히해야한다가, 두 번째는 (형식 인수가 Int처럼 AnyVal을 확장 자바 정의 제네릭을 사용하여 문제가있다)하지 않을 수 있습니다 사용합니다.

+0

첫 번째 조언은 도움이되었습니다. 목록에 자바 정수 유형을 추가했지만 작성 기능에 해당 유형을 전달해야했습니다. 나는 해결책으로 질문을 업데이트 할 것이다. 감사! – BenScape