fun getItems(): Observable<List<Item>> =
Observable.create { emitter ->
emitter.onNext(getItemsBlocking())
emitter.onComplete()
}
@Throws(IOException::class)
fun getItemsBlocking(): List<Item> = ...
Допустим у нас есть следующий код:
class Course(val id: Long)
class CourseContent(val sections: List<String>)
interface CourseRepository {
fun getCourse(courseId: Long): Maybe<Course>
}
interface CourseContentRepository {
fun getCourseContent(courseId: Long): Observable<CourseContent>
}
private val coursePublishSubject: BehaviorSubject<Course> =
BehaviorSubject.create()
fun getCourse(courseId: Long): Maybe<Course> =
courseRepository
.getCourse(courseId)
.doOnSuccess(coursePublishSubject::onNext)
fun getCourseContent(): Observable<CourseContent> =
coursePublishSubject
.flatMap { courseContentRepository.getCourseContent(it.id) }
// somewhere
val compositeDisposable = CompositeDisposable()
compositeDisposable += getCourseContent()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribeBy(
onNext = { Log.d("TAG", it.toString()) }
)
compositeDisposable += getCourse(111)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribeBy(
onNext = { Log.d("TAG", it.toString()) }
)
Что, в каком порядке и на каком потоке будет выполнено?
Допустим у нас есть следующий код:
class Item
class ItemResponse(
val items: List<Item>
)
/**
* Получение ItemResonse из сети
*/
fun getItemResponse(): Single<ItemResponse> = ...
fun getItems(): Single<List<Item>> =
getItemResponse()
.map(itemResponseMapper)
и мы бы хотели, чтобы при вызове метода map
каждый раз не создавался анонимный класс. Какая реализация это обеспечивает?
private val itemResponseMapper =
io.reactivex.functions.Function<ItemResponse, List<Item>>(ItemResponse::items)
private val itemResponseMapper =
ItemResponse::items
private val itemResponseMapper = { response: ItemResponse -> response.items }
Есть метод преобразующий Bundle
в Map<String, String>
fun bundleToMap(bundle: Bundle): Map<String, String> =
HashMap<String, String>()
.also { map ->
bundle.keySet().forEach { key ->
map[key] = bundle[key].toString()
}
}
Метод get
объявлен в Bundle
как
class Bundle {
/**
* Returns the entry with the given key as an object.
*
* @param key a String key
* @return an Object, or null
*/
@ android.annotation.Nullable
public Object get(String key);
}
Какой из двух методов будет вызван в строке 5: bundle[key].toString()
Extension для Any?
/**
* Returns a string representation of the object. Can be called with a null receiver, in which case
* it returns the string "null".
*/
public fun Any?.toString(): String
Или метод toString()
у Any
public open class Any {
/**
* Returns a string representation of the object.
*/
public open fun toString(): String
}
Допустим мы хотим написать расширение totalSize
для LongArray
, которое считает сумму длин подмассивов. Предложены две реализации:
fun Iterable<LongArray>.totalSize(): Int =
sumBy { array: LongArray -> array.size }
fun Iterable<LongArray>.totalSize(): Int =
sumBy(LongArray::size)
Есть ли различия между реализациями?
Постановка задачи: разработать чат с текстовыми сообщениями Схема В заголовке требуется передавать Bearer токен для текущего пользователя GET api/messages/{channel} Параметры: from - минимальный id сообщения
Jul 26, 2020Общие концепции AR контента 1 Поддерживаемые платформы: Все iOS устройства с iOS 12+ Все Android устройства с Android 7+ и Google Services в 3D режиме Android устройства из списка https://developers.google.com/ar/discover/supported-devices в AR режиме 2 Так как в данный момент AR контент будет отображаться только в мобильных приложениях, то возможность просматривать AR контент не должна быть обязательной для прохождения курса. Дополненная реальность призвана улучшать пользовательский опыт и помогать усваивать новый материал.
Apr 24, 2020Мы используем нашу архитектуру уже на протяжении нескольких лет. Как показывает практика одним из самым сложных аспектов этого подхода является presentation слой. За время работы я повидал множество различный вариаций и даже мутаций исходного подхода с явным состоянием, в которых терялись основные его свойства и преимущества. В данном цикле статей мы вместе поэтапно построим презентер для достаточно нетривиального экрана, тем самым пролив свет на многие темные участки state подхода. Общая информация В этом разделе поговорим об общих концепциях, связанных с нашей реализацией presentation слоя. Основы презентеров Начнем с того, что вспомним, на чем базируются наши презентеры. Все презентеры в наших проектах наследуются от класса PresenterBase (пакет presentation-base), с типовым параметром V означающим тип view контракта. PresenterBase import android.os.Bundle
Feb 17, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up