java – 使用来自不同类层次结构路由的两个字段进行map-filter lambda表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用来自不同类层次结构路由的两个字段进行map-filter lambda表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1838字,纯文字阅读大概需要3分钟。
内容图文
![java – 使用来自不同类层次结构路由的两个字段进行map-filter lambda表达式](/upload/InfoBanner/zyjiaocheng/741/bc8c3876bac34fa589c72fe1f82909e7.jpg)
我们有一个方法,它在类层次结构的顶部接收类的对象.它使用基于层次结构中更深层的字段的条件,如果满足,则它使用构建器另一个字段,也可以在层次结构中更深的位置但在从顶级类开始的不同路径上.
public Optional<SomeType> create(final TopClassInHierarchy topClass) {
Optional<SomeType> someObject = Optional.empty();
if (someCondition.evaluate(getFieldOne(topClass))) {
someObject = Optional.of(new SomeType.Builder()
.withFieldTwo(getFieldTwo(topClass))
.build());
}
return someObject;
private FieldOne getFieldOne(TopClassInHierarchy topClass) { return topClass.getSomething()...getFieldOne();
private FieldTwo getFieldTwo(TopClassInHierarchy topClass) { return topClass.getSomethingElse()...getFieldTwo();
我们希望最好将其浓缩为一个声明,如下所示
SomeType.Builder builder = new SomeType.Builder();
Optional.of(topClass)
.map(this::getFieldOne)
.filter(someCondition::evaluate)
.map(this::getFieldTwo) //???
.ifPresent(builder::withFieldTwo);
但是,一旦我们将topClass向下映射到fieldOne以进行条件评估,之后我们似乎无法“退回”到topClass以将其映射到fieldTwo以用于构建器.一个声明是否可行?
解决方法:
如果认为这应该工作:
public Optional<SomeType> create(final TopClassInHierarchy topClass) {
Builder builder = new Builder();
return Optional.of(topClass)
.filter(tc -> someCondition.evaluate(getFieldOne(tc)))
.map(tc -> builder.withFieldTwo(getFieldTwo(tc)).build());
}
someCondition.evaluate在filter中需要fieldOne作为输入,但要将topClass保持为Optional的当前状态,我们不会映射到fieldOne.而是使用方法getFieldOne.如果过滤器被传递,我们可以将topClass映射到由方法getFieldTwo检索的fieldTwo上应用的构建器的结果.
或者使用更多中间映射:
public Optional<SomeType> create(final TopClassInHierarchy topClass) {
Builder builder = new Builder();
return Optional.of(topClass)
.filter(tc -> someCondition.evaluate(getFieldOne(tc)))
.map(this::getFieldTwo)
.map(builder::withFieldTwo)
.map(Builder::build);
}
内容总结
以上是互联网集市为您收集整理的java – 使用来自不同类层次结构路由的两个字段进行map-filter lambda表达式全部内容,希望文章能够帮你解决java – 使用来自不同类层次结构路由的两个字段进行map-filter lambda表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。