我正在尝试将列表转换为地图。如果键存在,我只想合并两个值并用“,”将它们分开,然后将其分配给键。如果该键不存在,我只想直接将其分配为键值对,并希望为此使用流。
示例:
List<Object> listObject = {something1,something2,something3}
Map<String,String> listToMap = listObject.stream().collect(Collectors.toMap(listObject::getKey,listObject::getValue))
如果有重复的键,以上内容将出错。任何建议都对您有帮助。
答案 0 :(得分:1)
为了使toMap
处理重复的键,必须传递合并函数,该函数接受两个值并返回一个值。
在您的情况下,merge函数应将两个值连接起来:
List<Object> listObject = {something1,something2,something3}
Map<String,String> listToMap =
listObject.stream()
.collect(Collectors.toMap(listObject::getKey,
listObject::getValue,
(v1,v2)->v1+","+v2));
如果您希望将相同键的值保存在List
中,而不是将它们串联到单个String
中,请使用groupingBy
:
List<Object> listObject = {something1,something2,something3}
Map<String,List<String>> listToMap =
listObject.stream()
.collect(Collectors.groupingBy(listObject::getKey,
Collectors.mapping(listObject::getValue,
Collectors.toList())));