package collectionCollections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.SynchronousQueue;
public class TestCollections {
public static void main(String[] args) {
String a = "9:50 PM,12:25 PM,3:55 PM,10:15 PM,1:15 PM";
ArrayList al2 = new ArrayList();
ArrayList al3 = new ArrayList();
String arg[] = a.split(",");
// System.out.println(arg);
// Collections.sort(list);
List < String > al = new ArrayList < String > ();
al = Arrays.asList(arg);
for (String s: al) {
System.out.println(s);
al2.add(s.substring(0, 5).replace(':', '.'));
}
System.out.println(al2);
Iterator li = al2.iterator();
while (li.hasNext()) {
String s = (String) li.next();
float no = Float.parseFloat(s);
al3.add(no);
}
Collections.sort(al3);
int add = 0;
float ff = 0;
ListIterator lit = al3.listIterator();
while (lit.hasNext()) {
float f = (Float) lit.next();
int intno = (int) f;
if (intno == 12) {
add = intno;
ff = f - add;
System.out.println(ff);
lit.remove();
}
}
al3.add(0, add + ff);
System.out.println(al3);
}
}
(`我正在尝试对以下数组列表进行排序:
my Timestamps = [12:40 PM, 4:00 PM, 7:20 PM, 10:40 PM, 12:00 PM, 3:25 PM, 6:50 PM, 10:15 PM, 6:35 PM, 9:50 PM, 12:20 PM, 3:45 PM, 7:15 PM, 10:40 PM, 11:45 AM, 3:10 PM, 6:35 PM, 10:25 PM, 12:50 PM, 4:10 PM, 7:30 PM, 10:40 PM]
预期结果将在最早的索引中显示最早的11:45 AM。
我曾尝试将上述列表转换为整数,并且在特定时间(12:35 PM)有唯一时间(AM / PM)时,我能够对它进行排序,但是在特定时间(12:35 PM)有多个时间戳, 12:05 PM)我无法排序。
下面的代码对您来说是最简单的解决方案,与您的代码几乎没有什么变化:
将hh.mm转换为hh:mm AM / PM
package collectionCollections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.SynchronousQueue;
public class TestCollections {
public static void main(String[] args) {
//String a = "9:50 PM,12:25 PM,3:55 PM,10:15 PM,1:15 PM";
String a = "9:50 PM,12:25 PM,3:55 PM,10:15 PM,1:15 PM,1:00 AM, 12:25 AM, 10:13 AM";
List<String> al2 = new ArrayList<>();
List<Float> al3 = new ArrayList<>();
List<String> al4 = new ArrayList<>(); // list of final results to display
String arg[] = a.split(",");
// System.out.println(arg);
// Collections.sort(list);
List<String> al = new ArrayList<String>();
al = Arrays.asList(arg);
for (String s : al) {
System.out.println(s);
s = s.trim(); // remove leading and trailing spaces, otherwise the conversion to float will fail
s = s.replace("12:", "00:"); // do not forget 12:00 is like 00:00 and 12:00 AM/PM is least than 1:00 AM/PM
String[] t = s.split(" ");
String ampm = t[1]; // extract AM/PM
System.out.println("ampm "+ ampm );
if( ampm.toUpperCase().equals("PM")) {
String h = t[0].split(":")[0]; // extract hours
int hh = 12 + Integer.parseInt(h); // add 12 for PM
t[0] = t[0].replace(h+":", hh+":");
}
al2.add(t[0].replace(":", "."));
}
System.out.println(al2);
Iterator li = al2.iterator();
while (li.hasNext()) {
String s = (String) li.next();
float no = Float.parseFloat(s);
System.out.println(" s -> no : "+ s +" -> "+ no);
al3.add(no);
}
Collections.sort(al3);
ListIterator lit = al3.listIterator();
while (lit.hasNext()) {
float f = (Float) lit.next();
int intno = (int) f;
if(intno < 12 ) {
int hour12 = intno == 0 ? 12 : intno; // replace 00:xx am by 12:xx am
al4.add(hour12 +":"+ ((int)((f-intno)*100)) +" AM");
}
else {
al4.add((intno-12)+":"+ ((int)((f-intno)*100)) +" PM");
}
}
System.out.println(al4);
}
}
与清单
String a = "9:50 PM,12:25 PM,3:55 PM,10:15 PM,1:15 PM,1:00 AM, 12:25 AM, 10:13 AM";
结果是:
[12:25 AM, 1:0 AM, 10:13 AM, 0:25 PM, 1:14 PM, 3:55 PM, 9:50 PM, 10:14 PM]
以后的编辑中将提供更有效的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句