Java: как реализовать проверку края в Game of Life [дублировать]

Существует еще один очень удобный способ решения этой проблемы - использовать возможности параллелизма rxJava. Вы можете выполнить любую задачу в фоновом режиме и опубликовать результаты в основном потоке очень удобным способом, поэтому эти результаты будут переданы цепочке обработки.

Первый проверенный ответ - использование AsynTask. Да, это решение, но сейчас оно устарело, потому что вокруг есть новые инструменты.

String getUrl() {
    return "SomeUrl";
}

private Object makeCallParseResponse(String url) {
    return null;
    //
}

private void processResponse(Object o) {

}

Метод getUrl предоставляет URL-адрес, и он будет выполнен в основном потоке.

makeCallParseResponse (..) - делает фактическую работу

processResponse (..) - обрабатывает результат по основному потоку.

Код для асинхронного выполнения будет выглядеть так:

rx.Observable.defer(new Func0<rx.Observable<String>>() {
    @Override
    public rx.Observable<String> call() {
        return rx.Observable.just(getUrl());
    }
})
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.io())
    .map(new Func1<String, Object>() {
        @Override
        public Object call(final String s) {
            return makeCallParseResponse(s);
        }
    })
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<Object>() {
        @Override
        public void call(Object o) {
             processResponse(o);
        }
    },
    new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            // Process error here, it will be posted on
            // the main thread
        }
    });

По сравнению с AsyncTask этот метод позволяет переключать планировщики произвольным числом раз (скажем, извлекать данные на одном планировщике и обрабатывать эти данные на другом (скажем, Scheduler.computation ()). также можно определить собственные планировщики.

Чтобы использовать эту библиотеку, включите следующие строки в файл build.gradle:

   compile 'io.reactivex:rxjava:1.1.5'
   compile 'io.reactivex:rxandroid:1.2.0'

Последняя зависимость включает в себя поддержку .mainThread ().

Существует отличная книга g0 для rx-java .

0
задан user3066571 23 March 2014 в 01:07
поделиться

1 ответ

Как я вижу, у вас в основном есть два варианта:

  1. применять конечные границы, то есть для ячеек в первом и последнем столбцах и строках вы выполняете дополнительную проверку при подсчете число «живых» соседей.
  2. применяют периодические оценки, т. е. ячейки в крайнем левом столбце и ячейки в самом правом столбце рассматриваются как соседи. С помощью модульной арифметики эти ячейки не нужно обрабатывать отдельно от других.
3
ответ дан elias 25 August 2018 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: