- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将相同的操作应用于不同的流(目前使用 Java 8)
背景:我正在尝试从 Tika Metadata 对象中获取维度数据
以下工作但重复代码(metadata 是 Tika Metadata 对象):
private static void processDimensions(final Metadata metadata) {
Optional<Integer> optWidth = Arrays.stream(new String[] {"tiff:ImageWidth", "Image Width"})
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
// do something with optWidth
Optional<Integer> optHeight = Arrays.stream(new String[] {"tiff:ImageLength", "Image Height"})
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
// do something with optHeight
}
我已经到了不重复代码的地步:
private static void processDimensions(final Metadata metadata) {
Optional<Integer> optWidth = processDimension(metadata, "tiff:ImageWidth", "Image Width");
// do something with optWidth
Optional<Integer> optHeight = processDimension(metadata, "tiff:ImageLength", "Image Height");
// do something with optHeight
}
private static Optional<Integer> processDimension(final Metadata metadata, @NonNull final String... keys) {
return Arrays.stream(keys).map(metadata::get).filter(Objects::nonNull).map(v -> v.replace("pixels", ""))
.map(Integer::parseInt).findFirst();
}
是否可以在没有单独的方法(例如 processDimensions() 中的函数)的情况下做同样的事情?那看起来怎么样?
最佳答案
是的,将其声明为 java.util.Function
并重用它。
Function<String[], OptionalInt> funct = keys -> Arrays.stream(keys)
.map(metadata::get)
.filter(Objects::nonNull)
.map(v -> v.replace("pixels", ""))
.mapToInt(Integer::parseInt)
.findFirst();
这是你如何调用它。
funct.apply(strArr);
事实上,声明一个方法会给出一个更具可读性的名称,例如 processDimensions
,并且您可以使用比 lambda 更具描述性的名称声明参数类型,因此它对我来说更具可读性。除非您精通流,否则您可能很难阅读此管道。此外,方法定义了事实上的 API,但流管道通常没有。
关于java - 替代新方法以避免重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340590/
如果有人能为我分解它,让我能理解它,我会非常感激。我知道它用于通过 apply 方法创建新对象。 Function.prototype.new = function () { var args
新版本的HADOOP中有一个方法。http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html#conc
根据支持库变更日志和 Fragment 类文档 ( https://developer.android.com/reference/android/support/v4/app/Fragment.ht
根据支持库更改日志和 Fragment 类文档 (https://developer.android.com/reference/android/support/v4/app/Fragment.htm
执行Async BigJob() 的无限运行任务的正确方法是什么?并且可以根据要求停止 提示:我正在尝试学习 [一种] 新方法来更新我现有的策略。 我有一个简单的程序(测试程序),它有一个开始 和停止
我将解释我的想法:我使用 python 作为谷歌应用程序引擎 + js + css 主项目将存储在 src 文件夹下,如下所示:\src \app <--- 这里是 gae 的所有 python 应用
我是一名优秀的程序员,十分优秀!