在使用JSON Parser解析我的json文件之后,我得到了以下Java版本的列表:

List< List<HashMap<String,String>>> fields  = jsonContext.read(jsonPath);

该列表中的每个元素本身都是来自以下json struct 的HashMap和结果的列表:

 [
   {
    "value": "such",
    "name": "yname"
 },
 {
   "value": "Suchwort",
   "name": "yvbeds"
 },
 {
   "value": "",
   "name": "yfix"
 },
 {
   "value": "such",
   "name": "yzielfeld"
  }
 ],
  [
    {
     "value": "ftext",
     "name": "yname"
    },
    {
     "value": "Freitext 1",
     "name": "yvbeds"
    },
    {
      "value": "",
      "name": "yfix"
    },
    {
      "value": "ftext",
      "name": "yzielfeld"
    }
  ],

该json struct 创建了四个映射,每个映射都有两个键值对.我想把这四张 map 转换成一张 map .我在没有使用流的情况下实现了这一点,如下所示:

 List<HashMap<String,String>> newList = new ArrayList<>();

        for(int i=0;i< fields.size();i++) {
            HashMap<String,String> singleMap = new HashMap<>();
            List<HashMap<String,String>> listItem = fields.get(i);
            for(int j=0;j<listItem.size();j++) {
                HashMap<String,String> fieldMap = listItem.get(j);
                singleMap.put(fieldMap.get("name"),fieldMap.get("value"));
            }
            newList.add(singleMap);

        }

我try 了以下流方法,但在收集到 map 后,我需要再次收集以列出,但只有 map 选项:

   List<HashMap<String,String>> newList = fields.stream()
                 
  .flatMap(List::stream)
 .collect(Collectors.toMap(value->value.get("name"),value->value.get("value")))
                .

推荐答案

从非流代码中,您似乎希望将每个inner list映射到它自己的单独Map.

因此,您不应该展平(flatMap)外部列表.map个外部列表,每个内部列表collect(toMap)个.

List<Map<String, String>> result = fields.stream()
    .map(
        l -> l.stream().collect(
            // assuming the maps in each inner list do not have duplicate names
            Collectors.toMap(x -> x.get("name"), x -> x.get("value"))
            // if they do, give an appropriate merger function as the 3rd argument
        )
    )
    .toList();

Java相关问答推荐

Java Swing绘制gif作为多个JSYS和JLabels的背景

通过推送通知向自己发送Matrix消息

Mongo DB Bson和Java:在子文档中添加和返回仅存在于父文档中的字段?

是否需要关闭Executors返回的执行器.newVirtualThreadPerTaskExecutor()?

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

确定Java中Math.Ranb()输出的上限

无法在WebSocket onMessage中捕获错误

如何判断一个矩阵是否为有框矩阵?

Spring data JPA/Hibernate根据id获取一个列值

生成桥方法以解决具有相同擦除的冲突方法

使用PDFBox从PDF中删除图像

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

JNI:将代码打包成自包含的二进制文件

将ByteBuffer异步写入InputStream或Channel或类似对象

为什么相同的数据条码在视觉上看起来不同?

如何在Spring Boot Auth服务器上正确配置CORS?

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值

为什么child-pom会创建一个新版本

关于正则表达式的一个特定问题,该问题与固定宽度负向后看有关

Vaadin Flow:设置密码显示按钮属性