java.util.Function或Java方法,哪一个是最佳实践?

时间:2018-01-09 14:06:07

标签: java java-8 functional-programming

考虑我有一个接受参数并返回一些东西的Java方法。

object NetworkClient {
    var BASE_URL = "http://google.ru" //we can take this from another class or Pref's
    const val API_BASE_URL = "$BASE_URL/api/"

    val httpClient = OkHttpClient.Builder()
    val client: Client
    var retrofit: Retrofit

    init {    
        val builder = Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())

        retrofit = builder.client(httpClient.build()).build()
        client = retrofit.create<PapaJobsClient>(Client::class.java)
    }
}

但是,如果我使用Java 8 Function,我可以实现同样的目的。我的意思是,如果我创建以下函数,我将得到相同的行为。我的问题是推荐哪一个?自Java 8诞生以来哪一个更好或最好?

public Employee mapPersonToEmp(Person p) {
     ......
   return new Employee() ;
}

TIA。

1 个答案:

答案 0 :(得分:2)

Function<Person , Employee> function = p -> {
        ......
        return new Employee() ;
    } ; 

Employee e = function.apply(new Person());

Lambda用于传递行为。 如果您的要求是可以使用Person类的不同字段来创建Employee对象,并且需要在整个代码中传递此行为,那么您可以使用以下内容: -

Employee createEmpFromPerson(Function<Person, Employee> func) {
//this class already has a reference to some person object
return func.apply(person);
}

现在您可以通过以下方式调用此方法: -

createEmpFromPerson((per) -> new Employee(per.getName(), per.getEmail()));
createEmpFromPerson((per) -> new Employee(per.getName(), per.getAddress()));

这是一个非常简单的例子,旨在解释内置功能接口如何封装常见的行为。

显然,有更好的例子,但我希望你能理解我想要解释的内容。