Android SharedPreferences putStringSet order / sort

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

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» «данные», они сортируются по имени, и я не хочу этого. Я хочу получить тот же порядок, который у меня есть. Кто-нибудь может мне помочь?

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

Вы можете префикс своих строк по номерам, например, 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); 

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

 ["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(";"))); }