DaB*_*ick 1 java lambda java-stream method-reference
我想知道是否有一种更优雅的方式来编写以下代码,它利用了一些流,lambdas和方法引用的组合:
final boolean valid = StringUtils.hasText(obj.getFirstName())
&& StringUtils.hasText(obj.getLastName())
&& StringUtils.hasText(obj.getGender())
&& StringUtils.hasText(obj.getDob());
Run Code Online (Sandbox Code Playgroud)
理想情况下,它看起来像这样:
final boolean valid =
something(StringUtil::hasText,
obj.getFirstName(),
obj.getLastName(),
obj.getGender(),
obj.getDob());
Run Code Online (Sandbox Code Playgroud)
也许:
final boolean valid =
something(StringUtil::hasText, obj,
Type::getFirstName(),
Type::getLastName(),
Type::getGender(),
Type::getDob());
Run Code Online (Sandbox Code Playgroud)
显然你可以把所有的getter放到List中,然后使用一个流,但这看起来很罗嗦.在我看来,可能有库函数在JRE中或者在Spring或Apache中执行类似的操作.
使用其他任何东西,但你当前的方法只是让事情变得更糟.即使你要创建一个方法来执行"和"逻辑给定一些输入参数,你最终将会得到相同数量的代码,如果不是更多,肯定会更少的内存友好.
您可以使用allMatch评论中建议的内容:
Stream.of(obj.getFirstName(), obj.getLastName(), obj.getGender(), obj.getDob())
.allMatch(StringUtils::hasText)
Run Code Online (Sandbox Code Playgroud)
但是你可以看到这更复杂,更不易阅读.
结论是我不会用你当前的方法改变一件事.如果您不得不多次执行此检查,那么您可能需要退后一步并重新考虑您的设计.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |