在迭代函数列表时只调用一次Java 8函数

Jul*_*o D 0 java lambda function java-8

是否有一种优雅的方法来存储方法的返回值,apply()因此不必多次调用它?因为我能想到的唯一方法是创建一个本地映射变量来存储函数 - "返回值"对.

@Autowired
private List<Function<String, String>> evaluators; 
//...
private String evaluate(String code) {  
    return evaluators.stream().filter(f -> f.apply(code) != null).findFirst().get().apply(code); 
}
Run Code Online (Sandbox Code Playgroud)

sak*_*029 7

试试这个.

  private String evaluate(String code) {  
      return evaluators.stream()
          .map(f -> f.apply(code))
          .filter(s -> s != null)
          .findFirst().get();
  }
Run Code Online (Sandbox Code Playgroud)

  • @Tunaki:这个答案确定了问题的xy问题.原始流代码不必要地两次调用相同的函数.修复该问题消除了缓存结果的需要. (4认同)