Подтвердить что ты не робот

Android SharedPreferences putStringSet порядок/сортировка

Я пытаюсь сохранить/восстановить набор строк, и все работает, кроме одного. Когда я создаю свои строки, я поставлю:

Set<String> set = new HashSet<String>();
for(int i=0; i<toggles.size();i++){
   set.add(toggles.get(i).serialise());                 
}

Заказ - это, например, "blutooth" "application" "data". Когда я вернусь, установите:

Set<String> set = prefs.getStringSet(key, new HashSet<String>());
for (String toggle : set){
    Toggle t = new Toggle();
    t.deserialize(toggle);
    toggles.add(t); 
}

Я получаю "приложение" "bluetooth" "данные", они сортируются по имени, и я не хочу этого. Я хочу получить тот же порядок, который у меня есть. Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

Это невозможно. Наборы представляют собой неупорядоченные коллекции.

Ответ 2

Вы можете префикс своих строк по номерам, например 00application, 01bluetooth, 02data, в том порядке, в котором вы хотите их получить. Поместите Set<String>, возвращенный из getStringSet, в Array<Set> и отсортируйте его.

Set<String> set = prefs.getStringSet(key, new HashSet<String>());
Array<String> a = set.toArray();
java.util.Arrays.sort(a);

Ответ 3

Вы можете сохранить список строк в виде одной строки с разделителем. Например, это ваш массив:

["Italy", "France", "Spain", "Japan", "United States"]

Вы можете сохранить его как:

"Italy;France;Spain;Japan;United States"

В коде:

SharedPreferences sharedPref = mContext.getSharedPreferences(PREF_KEY, Context.MODE_PRIVATE);
Editor editor = sharedPref.edit();

// countries is your List
String countriesString = TextUtils.join(";", countries);
editor.putString("countries", countriesString);
editor.apply();

Чтобы получить данные:

final String countriesString = sharedPref.getString("countries", "");
List<String> countries = new ArrayList<>();
if (!countriesString.isEmpty()){
    countries = new ArrayList<>(Arrays.asList(countriesString.split(";")));
}