使用函数<i,o>可读性和性能

时间:2016-04-06 19:08:46

标签: java functional-programming java-7

一开始,给定一个对象列表,在我可以使用提供的列表之前,我必须对列表进行一些过滤。很自然地,我做如下:

List<Pokemon> pokemons = ....;
// {A block of code} : Reverse the list
// {A block of code} : Limit the list to N number
// {A block of code} : Only keep pokemons that ....

然后我看看Guava FluentIterable是如何工作的。所以我开始尝试做FluentIterable的工作。

我创建了一个新类,称之为PokemonsBuilder

    class PokemonsBuilder{
      List<Pokemons> result;
      public static newBuilder(){result = new List..};
      public PokemonsBuilder from (List<Pokemons> input){result.addAll(input) ; return this};
      public PokemonsBuilder apply(Function<List<Pokemons>,List<Pokemons>> filter){ result = filter.apply(result) ; return this};
      public List<Pokemons> build(){return result};
    }

另一个类,称之为PokemonsBuildOptions

     class PokemonsBuildOptions{
       public final Function<List<Pokemons>,List<Pokemons>> REVERSE_OPTION(){ return new Function ....}
       public final Function<List<Pokemons>,List<Pokemons>> LIMIT_OPTION(int limitTo){ return new Function ....}
       public final Function<List<Pokemons>,List<Pokemons>> ABC_OPTION(){ return new Function ....}
}

现在我的代码从

更改了
List<Pokemon> pokemons = ....;
// {A block of code} : Reverse the list
// {A block of code} : Limit the list to N number
// {A block of code} : Only keep pokemons that ....

   List<Pokemons> filteredList = PokemonsBuilder.newBuilder()
    .from(pokemons)
    .apply(PokemonsBuildOptions.REVERSE_OPTION)
    .apply(PokemonsBuildOptions.LIMIT_OPTION)
    .apply(PokemonsBuildOptions.ABC_OPTION)
    .apply(..Some other options for future usage..)
    .build();

到目前为止,我的感觉分为02种不同的方式:

  1. 我喜欢新代码,它让事情变得更容易理解(至少对我而言)

  2. 我注意到代码行数的增加。然后我开始疑惑:

    • 这种编码方式是否会降低我的应用程序的性能?
    • 我是否因滥用功能而使我的代码复杂化?
  3. 我是一名初级英国人。因此,任何评论或建议都受到欢迎。

    非常感谢。

0 个答案:

没有答案