将lambda转换为函数/方法

时间:2016-07-29 06:53:34

标签: java lambda java-8

我试图理解java中的一个程序,它使用lambda将对象返回到接口的引用变量中。我想将lambda转换为简单的java函数,但不知道该怎么做。

该计划如下: -

public class AgentLicenseLazyModel extends CoreDataModel<AgentLicenseModel> {

    public AgentLicenseLazyModel(final List<AgentLicenseModel> entities) {
        super(AgentLicenseModel.class, entities, (sortField, sortOrder) -> {
            return new AgentLicenseLazySorter(sortField, sortOrder);
        });
    }
}

这是抽象类:

public abstract class CoreDataModel<T extends AbstractEntityModel> extends LazyDataModel<T> {

private final Class<T> entityClass;
private final List<T> entities;
private final CoreDataSorterProducer<T> coreDataSorterProducer;

public CoreDataModel(final Class<T> entityClass, final List<T> entities, final CoreDataSorterProducer<T> coreDataSorterProducer) {
    this.entityClass = entityClass;
    this.entities = entities;
    this.coreDataSorterProducer = coreDataSorterProducer;

    if (entities != null) {
        setRowCount(entities.size());
    }
}

如何在不使用lambda进行学习的情况下将此程序转换为简单的java程序。请帮忙。

编辑: 这是CoreDataSorterProducer:

@FunctionalInterface
public interface CoreDataSorterProducer<T extends AbstractEntityModel> {

    CoreDataSorter<T> produce(String sortField, SortOrder sortOrder);
}

1 个答案:

答案 0 :(得分:7)

lambda表达式的主体是CoreDataSorterProducer<AgentLicenseModel>接口的单个​​抽象方法的实现。

您可以使用实现CoreDataSorterProducer<AgentLicenseModel>的匿名类实例替换lambda表达式。

public class AgentLicenseLazyModel extends CoreDataModel<AgentLicenseModel> {
    public AgentLicenseLazyModel(final List<AgentLicenseModel> entities) {
        super(AgentLicenseModel.class, entities, new CoreDataSorterProducer<AgentLicenseModel> () {

            public AgentLicenseLazySorter theMethodName (TheTypeOfSortField sortField, TheTypeOfSortOrder sortOrder) 
            {
                return new AgentLicenseLazySorter(sortField, sortOrder);
            }
        });
    }
}

请注意,theMethodNameTheTypeOfSortFieldTheTypeOfSortOrder应替换为CoreDataSorterProducer接口的方法名称及其参数类型。