使用java.util.prefs.Preferences.get获取比最新条目更早的首选项

时间:2015-02-28 06:21:53

标签: java preferences

使用java.util.prefs.Preferences API可以获得比上一个条目更旧的历史结果吗?

例如,如果你有

prefs.put("key", "value1");
prefs.put("key", "value2");

return prefs.get("key");

将返回“value2” 我能获得“value1”吗?

如果不是那么实现此功能的最佳替代方案是什么。

1 个答案:

答案 0 :(得分:1)

如果有人能做得更好,我很高兴接受他们的回答,同时:

import java.util.ArrayList;
import java.util.List;
import java.util.prefs.Preferences;

public class RecentStrings
{
    private final Preferences prefs;
    private final int noRecent;
    private static final int defaultNo = 10;
    private final String indexingKey;

    public RecentStrings()
    {
        this(Preferences.userRoot(), defaultNo, "r");
    }

    public RecentStrings(Preferences prefs, int noRecent, String indexingKey)
    {
        this.noRecent = noRecent;
        this.prefs = prefs;
        this.indexingKey = indexingKey;
    }

    public void setMostRecentString(String file)
    {
        if (!getAllRecentStrings().contains(file))
        {
            for (int i = noRecent-1; i >= 0; i--)
            {
                prefs.put(indexingKey+(i+1), prefs.get(indexingKey+i, ""));
            }
            prefs.put(indexingKey+0, file);
        }
        else
        {
            removeRecentString(file);
            setMostRecentString(file);
        }
    }

    private void removeRecentString(String file)
    {
        List<String> recents = getAllRecentStrings();
        recents.remove(file);
        for (int i=0; i < noRecent; i++)
        {
            String value;
            if (i < recents.size())
            {
                value = recents.get(i);
            }
            else
            {
                value = "";
            }
            prefs.put(indexingKey+i,value);
        }
    }

    public String getMostRecentString()
    {
        return prefs.get(indexingKey+0, "");
    }

    public List<String> getAllRecentStrings()
    {
        List<String> mostRecent = new ArrayList<>();
        for (int i = 0; i < 10; i++)
        {
            String value = prefs.get(indexingKey+i, "");
            if (!value.equals(""))
            {
                mostRecent.add(value);
            }
        }
        return mostRecent;
    }
}

其中还处理重复项并将事物从最新到最旧保存。