2 回答

TA貢獻1842條經驗 獲得超13個贊
幾個建議:
在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 及更高版本;)
添加回答
舉報