使用Java 8 Streaming将List <map>转换为Map <string,list <map>&gt;,使用值作为键

时间:2017-01-16 05:38:37

标签: java java-8 maps grouping java-stream

输入:

[
   {
     "A": "valToGroup_1",
     "B": "xxx"
   },
   {
     "A": "valToGroup_1",
     "B": "yyy"
   },
   {
     "A": "valToGroup_2",
     "B": "zzz"
   }
]

输出:

"valToGroup_1":[
    {"A": "valToGroup_1",
     "B": "xxx"
    },
    {"A": "valToGroup_1",
     "B": "yyy"
    }
]
"valToGroup_2":
[
  {"A": "valToGroup_2",
   "B": "zzz"
  }
]

也就是说,给定一个List输入,其中每个条目都是一个映射,我想通过所有映射共享的密钥的特定对应值返回分组。

假设:

  • 所有地图都有该密钥
  • 地图中的所有键都是字符串

我认为不使用流媒体就很简单: 迭代列表,获取“A”的值,并添加/创建一个条目,但我认为这将是一个很好的流媒体课程,可以导致更清晰的代码。

1 个答案:

答案 0 :(得分:-1)

Map<String, List<Map<?, ?>>> map = list.stream()
    .collect(Collectors.groupingBy(m -> m.get("A").toString()));