java7 flatmap_Java 8多级flatMap最佳实现

我有这两个代码示例:

代码A:

Stream aStream = firstLevelList.stream()

.flatMap(firstLevelElement -> firstLevelElement.getSecondLevelList().stream()

.flatMap(secondLevelElement -> secondLevelElement.getThirdLevelList().stream()

.map(thirdLevelElement -> thirdLevelElement.toString())));

代码B:

Stream aStream = firstLevelList.stream()

.flatMap(firstLevelElement -> firstLevelElement.getSecondLevelList().stream())

.flatMap(secondLevelElement -> secondLevelElement.getThirdLevelList().stream())

.map(thirdLevelElement -> thirdLevelElement.toString());

两者都有完全相同的结果,这是最好的实现?为什么?

最佳答案 选项1

以下内容读得很好,感觉更常见:

firstLevelList.stream()

.flatMap(firstLevelElement -> firstLevelElement.getSecondLevelList().stream())

.flatMap(secondLevelElement -> secondLevelElement.getThirdLevelList().stream())

.map(Object::toString);

它避免了@Holger指出的嵌套,这对读者来说很重要.

选项2

或者,如果它与代码库样式的其余部分不相符,我们可以使用不同的缩进来进行嵌套:

firstLevelList.stream().flatMap(

firstLevelElement -> firstLevelElement.getSecondLevelList().stream().flatMap(

secondLevelElement -> secondLevelElement.getThirdLevelList().stream().map(Object::toString)

)

);

选项3

如果它仍然感觉太神秘,我们可以提取变量或方法来命名不同的流:

firstLevelList.stream().flatMap(

firstLevelElement -> firstLevelElement.getSecondLevelList().stream().flatMap(

secondLevelElement -> getThirdLevelStream(secondLevelElement)

)

);

Stream getThirdLevelStream(SecondLevelElement secondLevelElement) {

return secondLevelElement.getThirdLevelList().stream().map(Object::toString);

}

选项4

我们可以将这些方法移动到现在关注Law of Demeter的元素类:

firstLevelList.stream().flatMap(FirstLevelElement::getSecondLevelStream);

class FirstLevelElement {

Stream getSecondLevelStream() {

return this.getSecondLevelList().stream().flatMap(SecondLevelElement::getThirdLevelStream);

}

Collection getSecondLevelList() {...}

}

class SecondLevelElement {

Stream getThirdLevelStream() {

return this.getThirdLevelList().stream().map(Object::toString);

}

Collection getThirdLevelList() {...}

}

如果在方法中的其他地方重用流方法,这将添加一些值.

结论

关于哪些选项更好,可以提出不同的论点.一般来说,它们都非常好.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值