24

我尝试保存/恢复一组字符串,除了一件事外一切正常。当我创建我的字符串时,我输入:

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

订单例如是“蓝牙”“应用程序”“数据”。当我回来时:

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

我得到“应用程序”“蓝牙”“数据”,它们按名称排序,我不想要这个。我想获得与我保存的相同的订单。任何人都可以帮助我吗?

4

4 回答 4

24

这是不可能的。集合是无序的集合。

于 2012-11-19T01:04:14.963 回答
14

您可以在字符串前面加上数字前缀,例如00application, 01bluetooth, 02data, 按照您想要取出它们的顺序。将Set<String>返回的 fromgetStringSet放入Array<Set>并排序。

Set<String> set = prefs.getStringSet(key, new HashSet<String>());
Array<String> a = set.toArray();
java.util.Arrays.sort(a);
于 2012-11-19T08:15:55.663 回答
10

您可以将字符串列表保存为带有分隔符的单个字符串。例如,这是您的数组:

["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(";")));
}
于 2017-07-11T13:26:15.853 回答
0
fun SharedPreferences.putNewStringIntoList(newString:String){
    val previous =getString(YOUR_KEY,"")?:""
    val without =previous.replace("${newString}|","")//Remove if already inside
    edit().putString(YOUR_KEY,"${without}|${newString}").apply()
}



fun SharedPreferences.getSortedList():List<String>{
    val strings =getString(YOUR_KEY,"")?:""
    return devices.split("|")
}

这适用于 Kotlin,替换 | 任何字符的字符都保证不在您的字符串中。

于 2021-04-29T10:15:18.123 回答