1
我已经用RxJava成功完成了一个小型Java程序。代码是:Android RxJava并行化 - 使用ExecutorService进行计算
public static void main(String[] args) {
int threadCt = Runtime.getRuntime().availableProcessors() + 1;
//multi-threading
ExecutorService executor = Executors.newFixedThreadPool(threadCt);
Scheduler scheduler = Schedulers.from(executor);
final AtomicInteger batch = new AtomicInteger(0);
Observable.range(1,80)
.groupBy(i -> batch.getAndIncrement() % threadCt)
.flatMap(g -> g.observeOn(scheduler)
.map(i -> intenseCalculation(i))
).subscribe(System.out::println);
}
public static int intenseCalculation(int i) {
try {
System.out.println("Calculating " + i +
" on " + Thread.currentThread().getName());
Thread.sleep(500);
return i;
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
使用此代码一切工作正常。现在,我想这个代码传递到Android:
Scheduler scheduler = Schedulers.from(executor);
final AtomicInteger batch = new AtomicInteger(0);
Observable.range(0, copiedCategories.size() - 1)
.groupBy(i -> batch.getAndIncrement() % threadCt)
.flatMap(g -> g.observeOn(scheduler))
.map(i -> intenseCalculation(i))
.subscribe(finishedListener::finished);
里面的方法完成()我正在更新GUI(finishedListener的是,目前活动正在实施一个接口)。
no instance(s) of type variable(s) exist so that void conforms to R
在的build.gradle(对于应用程序)我使用:
compile 'io.reactivex:rxjava:1.2.9'
- (> intenseCalculation(I)I)
我正在与地图的线得到一个错误
我该如何解决这个问题?
您能否重写代码?仍然不起作用... –
你有复制粘贴错误。您的Java和Android代码在运营商顺序上有所不同。在Java代码中,你使用'flatMap()',在'flatMap()'内部执行'observeOn()。map()'。但在Android代码中,您正在执行'flatMap()'和'map()'。你声称'现在我试图将这个代码传递给Android',但那不是相同的代码。 – azizbekian
的确,我的错误。但是我仍然得到错误。我已经在groupBy() –