用Java8 Lambda函数替换全部
给定以下变量
templateText = "Hi ${name}";variables.put("name", "Joe");
我想使用以下代码将占位符$ {name}替换为值“ Joe”(不起作用)
variables.keySet().forEach(k -> templateText.replaceAll("\\${\\{"+ k +"\\}" variables.get(k)));
但是,如果我采用“旧式”方式,则一切都将正常运行:
for (Entry<String, String> entry : variables.entrySet()){ String regex = "\\$\\{" + entry.getKey() + "\\}";
templateText = templateText.replaceAll(regex, entry.getValue());
}
我肯定在这里想念的东西:)
回答:
您还可以使用Stream.reduce(identity,accumulator,combiner)。
身份
identity
是减少函数的初始值accumulator
。
累加器
accumulator
减少identity
到result
,identity
如果流是 ,这是下一个减少的条件。
合路器
永远不要在 流中调用此函数。它计算下一个identity
从identity
&result
在 流。
BinaryOperator<String> combinerNeverBeCalledInSequentiallyStream=(identity,t) -> { throw new IllegalStateException("Can't be used in parallel stream");
};
String result = variables.entrySet().stream()
.reduce(templateText
, (it, var) -> it.replaceAll(format("\\$\\{%s\\}", var.getKey())
, var.getValue())
, combinerNeverBeCalledInSequentiallyStream);
以上是 用Java8 Lambda函数替换全部 的全部内容, 来源链接: utcz.com/qa/426509.html