簡體   English   中英

通過lambda java8轉換xml字符串

[英]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 )?

您可以使用reducetemplate條目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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM