先看源码:
/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package androidx.lifecycle; import androidx.annotation.MainThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.arch.core.util.Function; /** * Transformation methods for {@link LiveData}. * <p> * These methods permit functional composition and delegation of {@link LiveData} instances. The * transformations are calculated lazily, and will run only when the returned {@link LiveData} is * observed. Lifecycle behavior is propagated from the input {@code source} {@link LiveData} to the * returned one. */ @SuppressWarnings("WeakerAccess") public class Transformations { private Transformations() { } /** * Returns a {@code LiveData} mapped from the input {@code source} {@code LiveData} by applying * {@code mapFunction} to each value set on {@code source}. * <p> * This method is analogous to {@link io.reactivex.Observable#map}. * <p> * {@code transform} will be executed on the main thread. * <p> * Here is an example mapping a simple {@code User} struct in a {@code LiveData} to a * {@code LiveData} containing their full name as a {@code String}. * * <pre> * LiveData<User> userLiveData = ...; * LiveData<String> userFullNameLiveData = * Transformations.map( * userLiveData, * user -> user.firstName + user.lastName); * }); * </pre> * * @param source the {@code LiveData} to map from * @param mapFunction a function