java - 来自 lambda 的方法引用

标签 java lambda

在其中一种方法中,我们使用了 lambda 表达式(如下)嵌套流。

return req.gUs().stream()
.map((**cfg) -> {
.filter(Optional::isPresent)
.map(Optional::get);

我想使用一些辅助方法和方法引用(如下)移动部分代码。

(cfg) -> {
return rsp.getUs().stream()
.filter(result.getId())    
.map((result) -> gEvent(index, Builder, cfg));

非常感谢任何建议。

最佳答案

您可以创建一个返回函数的方法:

return req.getUs().stream()
.map(myFunction(rsp, index, headerBuilder))
.flatMap(stream -> stream)
.filter(Optional::isPresent)
.map(Optional::get);

private Function<CFGType, GenerateReturnType> myFunction(RspType rsp, IndexType index, HeaderType header){
  return (cfg) -> {
    return rsp.getPerUs().stream()
    .filter((result) -> cfg.getId() == result.getId())
    .filter((result) -> result.getCode() == ResultCode.SUCCESS)
    .map((result) -> generateEvent(index, headerBuilder, cfg));
  }
}

或者,如果 rsp、索引和 header 是字段,您可以使用方法引用:

return req.getUs().stream()
.map(this::myFunction)
.flatMap(stream -> stream)
.filter(Optional::isPresent)
.map(Optional::get);

private GenerateType myFunction(CFGType cfg) {
  return rsp.getUs().stream()
  .filter((result) -> cfg.getUsChId() == result.getChId())
  .filter((result) -> result.getResultCode() == ResultCode.SUCCESS)
  .map((result) -> generateEvent(index, headerBuilder, cfg));
}

关于java - 来自 lambda 的方法引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42664934/

相关文章:

java - 为什么即使其他人通过网络访问 PrinterJob[JAVA] 对话框仍然出现在主机中?

python - Pandas applymap 方法,传递列名作为参数

java - 如何使用 Stream API 从对象中检索嵌套列表?

Java - Jena API - 输出文件

Java : Iteration through a HashMap, 哪个效率更高?

java - Volatile 变量在这里有意义吗(多核处理器)?

javascript - 您可以使用 python 中的映射或其他高阶函数来跟踪索引吗?

java - 在循环数组中找到子序列的第 k 个最小数

lambda - Java 8 Stream 每 100 行读取一次文件

c++ - 从字符串到函数的映射中存在语法错误