mirror of
https://github.com/WiIIiam278/HuskSync.git
synced 2025-12-19 14:59:21 +00:00
refactor: improve data identifier map structure, fix #492
This commit is contained in:
@@ -31,7 +31,10 @@ public interface DataHolder {
|
|||||||
Map<Identifier, Data> getData();
|
Map<Identifier, Data> getData();
|
||||||
|
|
||||||
default Optional<? extends Data> getData(@NotNull Identifier id) {
|
default Optional<? extends Data> getData(@NotNull Identifier id) {
|
||||||
return getData().entrySet().stream().filter(e -> e.getKey().equals(id)).map(Map.Entry::getValue).findFirst();
|
if (getData().containsKey(id)) {
|
||||||
|
return Optional.of(getData().get(id));
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
default void setData(@NotNull Identifier identifier, @NotNull Data data) {
|
default void setData(@NotNull Identifier identifier, @NotNull Data data) {
|
||||||
|
|||||||
@@ -406,7 +406,9 @@ public class DataSnapshot {
|
|||||||
return deserialized.entrySet().stream()
|
return deserialized.entrySet().stream()
|
||||||
.collect(Collectors.toMap(
|
.collect(Collectors.toMap(
|
||||||
entry -> entry.getKey().toString(),
|
entry -> entry.getKey().toString(),
|
||||||
entry -> plugin.serializeData(entry.getKey(), entry.getValue())
|
entry -> plugin.serializeData(entry.getKey(), entry.getValue()),
|
||||||
|
(a, b) -> a,
|
||||||
|
HashMap::new
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import java.util.stream.Stream;
|
|||||||
* Identifiers of different types of {@link Data}s
|
* Identifiers of different types of {@link Data}s
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
public class Identifier {
|
public class Identifier implements Comparable<Identifier> {
|
||||||
|
|
||||||
// Namespace for built-in identifiers
|
// Namespace for built-in identifiers
|
||||||
private static final @KeyPattern String DEFAULT_NAMESPACE = "husksync";
|
private static final @KeyPattern String DEFAULT_NAMESPACE = "husksync";
|
||||||
@@ -276,6 +276,14 @@ public class Identifier {
|
|||||||
return Map.entry(getKeyValue(), enabledByDefault);
|
return Map.entry(getKeyValue(), enabledByDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Comparable; always sort this Identifier after any dependencies
|
||||||
|
@Override
|
||||||
|
public int compareTo(@NotNull Identifier o) {
|
||||||
|
if (this.dependsOn(o)) return 1;
|
||||||
|
if (o.dependsOn(this)) return -1;
|
||||||
|
return this.key.compareTo(o.key);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compares two identifiers based on their dependencies.
|
* Compares two identifiers based on their dependencies.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A holder of data in the form of {@link Data}s, which can be synced
|
* A holder of data in the form of {@link Data}s, which can be synced
|
||||||
@@ -46,7 +48,11 @@ public interface UserDataHolder extends DataHolder {
|
|||||||
.filter(Identifier::isEnabled)
|
.filter(Identifier::isEnabled)
|
||||||
.map(id -> Map.entry(id, getData(id)))
|
.map(id -> Map.entry(id, getData(id)))
|
||||||
.filter(data -> data.getValue().isPresent())
|
.filter(data -> data.getValue().isPresent())
|
||||||
.collect(HashMap::new, (map, data) -> map.put(data.getKey(), data.getValue().get()), HashMap::putAll);
|
.collect(Collectors.toMap(
|
||||||
|
Map.Entry::getKey,
|
||||||
|
entry -> entry.getValue().get(),
|
||||||
|
(a, b) -> a, HashMap::new
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user