在 java 中的 class 初始化时,将 Collection 的深层副本创建到 ImmutableSortedSet

Create a deep copy of a Collection to a ImmutableSortedSet upon initialization of a class in java

我有一个在 class 初始化时创建的 ImmutableSortedSet。对于此 class 的每个对象,我希望 ImmutableSortedSet 具有存储在位于另一个文件中的集合中的元素的深层副本(克隆)。

这是原始值的集合(也可以是集合)

public static final List<Quest> QUESTS = new ArrayList<>();

这是我想用 ImmutableSortedSet

创建的 class
package com.vencillio.rs2.content.quest;

import java.util.Optional;
import java.util.Set;

import com.google.common.collect.ImmutableSortedSet;

public class QuestManager {

    private int questPoints = 0;
    private final Set<Quest> QUESTS = ImmutableSortedSet.copyOf(Quest.QUESTS); //This is only a shallow copy

    public int getQuestPoints() {
        return questPoints;
    }

    public void addQuestPoints(int amount) {
        questPoints += amount;
    }

    public void removeQuestPoints(int amount) {
        questPoints -= amount;
    }

    public Optional<QuestState> getQuestState(String name) {
        return getQuest(name).isPresent() ? Optional.of(getQuest(name).get().getQuestState()) : Optional.empty();
    }

    public void setQuestState(String name, QuestState state) {
        if(getQuest(name).isPresent())
            getQuest(name).get().setQuestState(state);
    }

    public Optional<Quest> getQuest(String name) {
        return QUESTS.stream().filter(quest -> quest.getName().equalsIgnoreCase(name)).findAny();
    }
}

您一开始就没有解释如何获得 Quest 的副本,这是 您的 设计的一个方面。一般来说,我会写类似

import static com.google.common.collect.ImmutableSortedSet.toImmutableSortedSet;
import static java.util.Comparator.naturalOrder;

Quest.QUESTS.stream()
   .map(quest -> copy(quest))
   .collect(toImmutableSortedSet(naturalOrder()));