【发布时间】:2016-06-20 05:41:10
【问题描述】:
我一直在到处寻找解决方案,但无法找到可行的解决方案。
我有一个“记分牌”,需要显示应用使用 Joda Time 计算的最高“时间”(两个瞬间之间的时间段)。
所有字符串都存储在一个 ArrayList 中,并通过 ArrayAdapter 和 ListView 显示。
问题:即使使用 ISO 格式,Collections.sort 似乎也无法正常工作。
我正在使用以下格式节省时间:
PeriodFormatter formatter = ISOPeriodFormat.standard();
它给出了这个:“PT1M15.664S” (1 分 15 秒)
我将其转换为字符串并存储到 ArrayList 中。
如何对这些字符串进行排序,使其在记分板上的时间从最长到最短?
我尝试过自然排序和 Alphanum Comparator,但没有成功。每次超过上限(分钟、小时、天)时,值都会变成这样:
"PT2.455S"
"PT1.324S"
"PT1M15.333S"
而不是我想要的:
"PT1M15.333S"
"PT2.455S"
"PT1.324S"
使用 Collection.sort(myArrayList) 也不起作用。
知道我应该怎么做吗?
我的代码:
// set is a set<String> retrieving it's values from a stringset scores saved
in the sharedpreferences of the app
set = sharedPreferences.getStringSet("scores", null);
//scores is the ArrayList
scores.clear();
if (set != null){
scores.addAll(set);
}else{
scores.add("No Time Yet!");
set = new LinkedHashSet<String>();
set.addAll(scores);
sharedPreferences.edit().putStringSet("scores",set).apply();
}
//removing the String No Time Yet because it no longer serves a purpose here
if ((set != null)&& (set.size()>1)){
scores.remove("No Time Yet!");
}
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,scores);
listView.setAdapter(arrayAdapter);
Collections.sort(scores);
感谢您的宝贵时间。
【问题讨论】:
-
想法:不要对字符串值进行排序。 在将 Joda 句点转换为字符串之前对它们进行排序。
-
当然,您首先必须定义排序顺序,例如
P30DT2H是大于还是小于P1M?PT23H30M是大于还是小于P1D?如果您正在观察夏令时,答案是 less,除了一年中的某一天,它是 more。同样,PT24H和P1D是相等的,除了每年 2 天。 -
这将是一个好主意,但我无法将句点保存为 android 中 sharedpreferences 的一部分(我从另一个活动中获取值),所以我坚持使用字符串集.
-
然后将它们解析回句点。
标签: java android sorting arraylist jodatime