【发布时间】:2019-04-05 13:54:25
【问题描述】:
我有一个包含多个get 函数的类,例如getF1 到getF10。对于这些吸气剂中的每一个,我希望将字母 "x" 替换为 "a"(随机示例)。 getter 可以返回一个空值。
到目前为止,这就是我所做的并且它有效,有没有办法得到比这更好看的东西?
public void foo(final MyObject bar) {
Optional.of(bar).map(MyObject::getF1).ifPresent(s -> bar.setF1(s.replaceAll("x", "a"));
Optional.of(bar).map(MyObject::getF2).ifPresent(s -> bar.setF2(s.replaceAll("x", "a")));
...
Optional.of(bar).map(MyObject::getF10).ifPresent(s -> bar.setF10(s.replaceAll("x", "a")));
}
我在想这样的事情,使用列表,显然,这段代码是错误的,但你明白了:
public void foo(final MyObject bar) {
List<Function> func = new ArrayList<Function>();
func.addAll(Arrays.asList(MyObject::getF1, MyObject::getF2, ..., MyObject::getF10));
Optional.of(bar).map(func).ifPresent(s -> func(s.replaceAll("x", "a"));
}
也许使用流可以完成工作?
谢谢!
【问题讨论】:
-
这些字段是
F1...F10生成的还是您手动创建的? -
第三行
Optional.of(bar).map(MyObject::getF10).ifPresent(s -> bar.setF3(s.replaceAll("x", "a")));- 正在获取F10并设置F3是故意还是错字? -
如果 F1 - F10 属于同一类型,您能否将它们作为数组存储在您的对象中,并创建一个通用的
get()方法,在其中指定索引 1-10。这样你就可以在 for 循环中遍历并对每一个执行相同的操作。 -
@Nikolas 确实是一个错字
-
@Nikolas F1 到 F10 是用户输入生成的字符串
标签: java dictionary java-8 optional