Java 如何将映射列表转换为哈希数组

Java 如何将映射列表转换为哈希数组,java,arrays,json,list,Java,Arrays,Json,List,我的应用程序使用Java。这是我的输入数据 [{ "id": 1, "firstname": "one", "lastname": "1" }, { "id": 2, "firstname": "two", "la

我的应用程序使用Java。这是我的输入数据

  [{
        "id": 1,
        "firstname": "one",
        "lastname": "1"
    },
    {
        "id": 2,
        "firstname": "two",
        "lastname": "2"
    },
    {
        "id": 3,
        "firstname": "three",
        "lastname": "3"
    }
  ]
我想把上面的输入转换成下面的输出。如何以有效的方式实现以下输出

{
    ["id", "firstname", "lastname"], [1, "one", "1"], [2, "two", "2"], [3, "three", "3"]
}
更新:

 Map<String, Object> one = Map.of("id", 1, "firstname", "one", "lastname", "1");
        Map<String, Object> two = Map.of("id", 2, "firstname", "two", "lastname", "2");
        Map<String, Object> three = Map.of("id", 3, "firstname", "three", "lastname", "3");

        ArrayList<Map<String,Object>> list = new ArrayList<>();
        list.add(one);
        list.add(two);
        list.add(three);

        MultiValueMap<Object, Object> result = new LinkedMultiValueMap<>();
        Set<String> strings = list.get(0).keySet();

        ArrayList<Object> objects = new ArrayList<>();
        for(Map<String,Object> map: list) {
            objects.add(map.values());
        }

        result.put(strings, objects);
我试过下面的方法。但结果如下

预期:

result => {[lastname, id, firstname]=[[1, 1, one], [2, 2, two], [3, 3, three]]}
实际:

结果=>{[lastname,id,firstname],[1,1,1],[2,2,2],[3,3,3]}

代码:

 Map<String, Object> one = Map.of("id", 1, "firstname", "one", "lastname", "1");
        Map<String, Object> two = Map.of("id", 2, "firstname", "two", "lastname", "2");
        Map<String, Object> three = Map.of("id", 3, "firstname", "three", "lastname", "3");

        ArrayList<Map<String,Object>> list = new ArrayList<>();
        list.add(one);
        list.add(two);
        list.add(three);

        MultiValueMap<Object, Object> result = new LinkedMultiValueMap<>();
        Set<String> strings = list.get(0).keySet();

        ArrayList<Object> objects = new ArrayList<>();
        for(Map<String,Object> map: list) {
            objects.add(map.values());
        }

        result.put(strings, objects);
Map one=Map.of(“id”,1,“firstname”,“one”,“lastname”,“1”);
图二=图二的“id”,2,“firstname”,“two”,“lastname”,“2”);
地图三=地图三(“id”,3,“名字”,“三”,“姓氏”,“3”);
ArrayList=新建ArrayList();
列表。添加(一个);
增加(两个);
增加(三);
多值映射结果=新的LinkedMultiValueMap();
Set strings=list.get(0.keySet();
ArrayList对象=新的ArrayList();
用于(地图:列表){
objects.add(map.values());
}
结果.put(字符串、对象);

可以将输入JSON读入共享相同密钥集的映射列表
数据
,该列表将转换为对象数组列表,该列表的第一个元素是映射的密钥

因此,首先应创建字段名数组,将其转换为
,然后与从
数据
列表中每个映射的值检索的
合并:

//使用Jackson JSON读取输入
ObjectMapper mapper=新的ObjectMapper();
字符串输入=“[{\'id\':1,\'firstname\':\'First\',\'lastname\':\'Last\'}]”;
List data=mapper.readValue(输入,new-TypeReference(){});
列表输出=Stream.concat(
Stream.of(data.get(0.keySet().toArray()),
data.stream().map(m->m.values().toArray())
)
.collect(Collectors.toList());
printf(“结果:{%n\t%s%n}%n”,
output.stream().map(Arrays::toString.collect(Collectors.joining(“,”));
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(输出));
输出:

Result: {
    [id, firstname, lastname], [1, First, Last]
}
[ [ "id", "firstname", "lastname" ], [ 1, "First", "Last" ] ]

或者类似地,结果可能是基于映射的原始集合列表“
keySet()
,可以这样创建:

List result=Stream.concat(
Stream.of(data.get(0.keySet()),
data.stream().map(map::values)
).collect(Collectors.toList());

您尝试过什么,为什么不奏效?另一件需要澄清的事情是,您为什么要这么做?这听起来像是XY问题的一个例子。你的投入保证是什么?所有地图都有相同的键吗?你能分享你解决问题的方法吗?键的显示顺序是否相同?为什么需要将结构化对象(可以轻松映射到POJO)转换为原始对象数组?是的。钥匙的顺序是一样的。它可以是嵌套映射。