我有一个名为entityobjectd的对象,如下所示:
public @Data class EntityObjectDTO {
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public static class Attributes {
private String name;
private AttributeType attributeType;
private String dataType;
}
}
此attributetype是枚举,可以有值(原始、引用、原始)。我正在尝试将所有属性名称和数据类型存储到字符串键和值的hashmap中。此数据类型也可以重复。
输入:
EntityObjectDTO obj= new EntityObjectDTO ();
obj.getAttributes().setName("name1");
obj.getAttributes().setAttributeType(REFERRED);
obj.getAttributes().setDataType("Vehicle");
obj.getAttributes().setName("name2");
obj.getAttributes().setAttributeType(REFERRED);
obj.getAttributes().setDataType("Vehicle");
obj.getAttributes().setName("name3");
obj.getAttributes().setAttributeType(REFERRED);
obj.getAttributes().setDataType("Person");
hashmap中需要:
{“车辆”,“名称1,名称2”}
{“人”,“名字3”}
这就是我所尝试的:
Map<String, String> myMap = obj.getAttributes().stream()
.filter(entity -> AttributeType.REFERRED.equals(entity.getAttributeType()))
.collect(Collectors.toMap(EntityObjectDTO.Attributes::getDataType, e -> e.getName()));<br/>
但是这样我就得到了:java.lang.illegalstateexception:消息:duplicate key vehicle(尝试合并值name1和name2)
如何通过对现有代码进行一些修改来实现预期的输出?
2条答案
按热度按时间hmae6n7t1#
我想你的
EntityObjectDTO
如下所示,以及
Attributes
如下所示,那么下面的就可以了,
请注意,我使用了单独的类。
n1bvdmb62#
我知道,你的类entityobjectd需要一个属性集合(list),你没有像你提到的那样,我改变了它如下,得到了你需要的输出。
输出:{vehicle=name1,name2,person=name3}