2 回答
TA贡献1842条经验 获得超12个赞
几个建议:
在Map声明中使用接口:
public Map<Permissions, List<Attributes>> paMap;
Map为了在确保中用作键Permissions是不可变的,并且具有equals并hashCode正确定义
所以,假设Permissions只有 1 个字符串字段,它应该看起来像这样:
public final class Permissions {
private final String permission;
public Permissions(String permission) {
this.permission = permission;
}
public String getPermission() {
return this.permission;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Permissions that= (Permissions ) o;
return Objects.equals(this.permission, that.permission);
}
@Override
public int hashCode() {
return Objects.hash(this.permission);
}
}
尝试另一种printMap方法实现。例如,对于 Java 8:
private void printMap() {
paMap.entrySet().stream().map(this::format).forEach(System.out::println);
}
private String format(Map.Entry<Permissions, List<Attributes>> entry) {
String key = formatPermissions(entry.getKey());
String value = formatAttributes(entry.getValue());
return String.format("%s: %s", key, value);
}
private String formatPermissions(Permissions permissions) {
return permissions.name;
}
private String formatAttributes(List<Attributes> attributes) {
return attributes.stream()
.map(attr -> String.format("(%s, %s)", attr.variable, attr.value))
.collect(Collectors.joining("; "));
}
TA贡献1856条经验 获得超17个赞
我不知道 read 方法看起来如何,但似乎你一直在添加相同的属性,所以可能在 read 函数中你不是创建新属性而是一直使用相同的对象,只是在这个对象上调用集合,所以在最后的数组 lsit 是同一个对象加了 3 次
顺便说一句:方法 addmap 也可以替换为:
paMap.computeIfAbsent(per,x->new ArrayList<Attributes>()).add(att);
如果您使用的是 java8 及更高版本;)
添加回答
举报