kotlin相关专题

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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读