[英]How to split a HashMap in Apache Camel?
我有一个大小为 14 的Map<String, List<String>>
。我需要拆分 map 以便我可以获得 14 个大小为 1 的地图。 我尝试了以下代码,但拆分不起作用:拆分后的大小仍然是 14。
from("direct:receive-the-list")
.errorHandler(defaultErrorHandler())
.bean(new ListToMapTransformer()) // aggregate list of strings into a Map of strings based on some prefix
.log("Size of the body BEFORE SPLIT: ${body.size}");
.split(body())
.log("Size of the body AFTER SPLIT: ${body.size}");
有谁知道我怎样才能让它工作?
我不明白您的问题,但我认为此代码示例可以解决您的问题。 Map 中的拆分行为是 Map.Entry。 这将返回 Node.class 并且您可以使用.value 获取此值
from("timer:test?repeatCount=1")
.process(e -> {
Map<String, List<String>> map = new HashMap<>();
map.put("name", List.of("name", "name1","namo"));
map.put("surname", List.of("surname"));
map.put("age", List.of("age", "age1"));
e.getIn().setBody(map);
})
.split(body())
.setBody(simple("${body.value}"))
.log("${body.class} ${body.size} ${body}");
output
:class java.util.ImmutableCollections$List12 1 surname
:class java.util.ImmutableCollections$ListN 3 name,name1,namo
:class java.util.ImmutableCollections$List12 2 age,age1
或更复杂的例子。 您可以将每个列表字段拆分为一个正文
from("timer:test?repeatCount=1")
.log("its works")
.process(e -> {
Map<String, List<String>> map = new HashMap<>();
map.put("name", List.of("name", "name1"));
map.put("surname", List.of("surname", "surname1"));
map.put("age", List.of("age", "age1"));
e.getIn().setBody(map);
})
.split(body(), new GroupedBodyAggregationStrategy())
.setBody(simple("${body.value}"))
.split(body(), new GroupedBodyAggregationStrategy())
.log("${body}");
听起来您可能只想迭代 map 条目:
.split(simple("${body.entrySet()}"))
.log("${body.key}") // key is a String
.log("${body.value}") // value is List<String>
骆驼拆分 EIP 不支持地图。 如果要遍历 map,可以定义自定义拆分器 bean,如下所示: 拆分器 EIP 可以拆分 HashMap 还是必须是列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.