[英]transform xml string by lambda java8
我有String
作為XML。 我正在嘗試通過正則表達式轉換String
:
public String replaceValueByTag(final String source, String tag, String value) {
return replaceFirst(source, "(?<=<" + tag + ">).*?(?=</" + tag + ">)", value);
}
然后使用新值標簽創建地圖:
Map<String, String> params = TAGS.stream().collect(toMap(tag -> tag, tag -> substringByTag(request, tag)));
並使用map替換XML中的值:
public String getConfirm(String request) {
String[] answer = {template};
Map<String, String> params = TAGS.stream().collect(toMap(tag -> tag, tag -> substringByTag(request, tag)));
params.entrySet().forEach(entry -> answer[0] = replaceValueByTag(answer[0], entry.getKey(), entry.getValue()));
return answer[0];
}
如何在不保存數組的情況下編寫lambda表達式(lambda使用String
,通過map轉換並返回String
)?
您可以使用reduce
將template
條目Stream
的所有元素應用於template
字符串。
不過,我不確定合並combiner
外觀(即如何將兩個部分轉換的String
合並為包含所有轉換的String
),但是如果順序Stream
足夠,則不需要合並器:
String result =
params.entrySet()
.stream()
.reduce(template,
(t,e) -> replaceValueByTag(t, e.getKey(), e.getValue()),
(s1,s2)->s1); // dummy combiner
除了使用中間映射,您可以直接應用終端操作,而使用@red建議的.reduce .reduce()
操作:
String result = TAGS.stream()
.reduce(
template,
(tmpl, tag) -> replaceValueByTag(tmpl, tag, substringByTag(request, tag),
(left, right) -> left) // TODO: combine them
);
這樣,您將沒有太多的開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.