Transformations的map与switchMap的理解
2020-05-02 本文已影响0人
北雁南飞_8854
一、Transformations.map
@MainThread
@NonNull
public static <X, Y> LiveData<Y> map(
@NonNull LiveData<X> source,
@NonNull final Function<X, Y> mapFunction);
理解:
对LiveData<X> source发射的每一个数据X,使用映射函数Y apply(X)将数据由类型X转化为类型Y,然后返回一个发射Y类型数据的LiveData实例。换句话说,将发射(emit)的数据类型由X转化为Y。
注意:apply()函数在主线程中执行。
给定的参数mapFunction为接口:
/**
* Represents a function.
*
* @param <I> the type of the input to the function
* @param <O> the type of the output of the function
*/
public interface Function<I, O> {
/**
* Applies this function to the given input.
*
* @param input the input
* @return the function result.
*/
O apply(I input);
}
二、Transformations.switchMap
@MainThread
@NonNull
/**
* @param trigger 要监听的LiveData<X>实例;
* @param func switchMap函数,由参数X返回一个创建好的"backing"LiveData<Y>实例;
* @param <X> 参数source的LiveData数据类型;
* @param <Y> 返回的LiveData数据类型。
*/
public static <X, Y> LiveData<Y> switchMap(
@NonNull LiveData<X> source,
@NonNull final Function<X, LiveData<Y>> switchMapFunction);
举例:
private MutableLiveData<String> userIdLiveData = new MutableLiveData<>();
private LiveData<User> userLiveData = Transformations.switchMap(userIdLiveData,
new Function<String, LiveData<User>>() {
@Override
public LiveData<User> apply(String userId) {
//repository.getUserById(userId)返回一个LiveData<User>类型。
return repository.getUserById(userId);
}
});
public void setUserId(String userId) {
userIdLiveData.setValue(userId);
}
public class User {
private String userId;
private String userName;
public String getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
public void setUserId(String userId) {
this.userId = userId;
}
public void setUserName(String userName) {
this.userName = userName;
}
}