繁体   English   中英

如何在 Apache Camel 中拆分 HashMap?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM