Kibana 如何将Map转换为String?

vxqlmq5t  于 2022-12-09  发布在  Kibana
关注(0)|答案(4)|浏览(236)

这是我的Map:

Map<String, Object> params = new HashMap<>();
        params.put("topicRef", "update-123456-78925-new-u1z1w3");
        params.put("parentRef", "update-123456-78925-new-u1z1w3");

        Script script = new Script(ScriptType.INLINE, "painless",
                String.format("ctx._source.parentRef = params.parentRef; ctx._source.topicRef = params.topicRef"),
                params);
        request.setScript(script);

我想将Map转换为字符串,但我想更改的模式,例如:

"ctx._source.key = value;ctx._source.key = value"

我想给键值添加一个前缀ctx._source.key和一个后缀" ="(空格和等号),然后我想用分号分隔每个条目。

5cnsuln7

5cnsuln71#

String formattedMap = params.entrySet().
        stream()
        .map(e -> "ctx._source." + e.getKey() + " = " + e.getValue())
        .collect(Collectors.joining(","));
xsuvu9jc

xsuvu9jc2#

请尝试以下操作:

Map<String, String> yourMap = /*...*/;
StringBuilder bob = new StringBuilder();
yourMap.forEach((key, value) -> bob.append(key).append("=").append(value).append(";"));
String result = bob.toString();

如有必要,您可以通过String.concat()删除结果中的最后一个;

u5i3ibmn

u5i3ibmn3#

您可以对Map的条目进行流处理,然后使用map操作将每个条目Map到格式化的String,并最终使用collect(Collectors.joining(";"))操作连接每个元素。

Map<String, Object> params = new HashMap<>();
params.put("topicRef", "update-123456-78925-new-u1z1w3");
params.put("parentRef", "update-123456-78925-new-u1z1w3");

String result = params.entrySet().stream()
        .map(entry -> String.format("%s%s%s%s", "ctx._source.", entry.getKey(), " =", entry.getValue()))
        .collect(Collectors.joining(";"));

System.out.println(result);

下面是测试代码的链接
https://www.jdoodle.com/iembed/v0/rrK

输出

wbgh16ku

wbgh16ku4#

String result = params.entrySet()
               .stream()
               .map(x -> "ctx._source." + x.getKey() + " = " + x.getValue())
               .reduce((x, y) -> x + ";" + y).get();

相关问题