I have this array storing the suffix of some URLs the user is adding:
[U2, U3, U1, U5, U8, U4, U7, U6]
When I do this:
for (Map map : getUrlAttachments()) {
String tmpId = map.get("id"); //it receives the U2, in the 1st iteration, then U3, then U1,...
if (tmpId.charAt(0) == 'U') {
tmpId.charAt(1);//2, then 3, then 1,...
String url = map.get("url");
String description = map.get("description");
URLAttachment attachment;
String cleanup = map.get("cleanup");
if (cleanup == null && url != null && description != null) {
attachment = new URLAttachmentImpl();
attachment.setOwnerClass(FileUploadOwnerClass.Event.toString());
attachment.setUrl(url);
attachment.setDescription(description);
attachment.setOwnerId(auctionHeaderID);
attachment.setUrlAttachmentType(URLAttachmentTypeEnum.EVENT_ATTACHMENT);
attachment.setDateAdded(new Date());
urlBPO.save(attachment);
}
My problem:
I want to change this For condition by passing another list mapping the data sorted like [U1, U2, U3, U4, U5, U6, U7, U8].
I'd like your help to know what's the best way I could do this.
I thought about creating an array listing the ids and then sort then, but I don't know how exactly to sort alphanumeric strings in java.
解决方案
I decide to use the idea @Abu gave, but I adapted it:
I check the ids of the urls the user is trying to add,
I remove the alphabetic suffix in this id and then I create an ArrayList to store the numerical part of each id.
I sort this ArrayList like @Abu taught me in his answer and then I verify for each id in this sorted ArrayList in the sequence it should be added..
ArrayList urlSorted = new ArrayList();
//sort the url ids
for (Map map : getUrlAttachments()) {
String tmpId = map.get("id");
if (tmpId.charAt(0) == 'U') {
//gets the id, removing the prefix 'U'
urlSorted.add( Integer.valueOf(tmpId.substring(1)));
}
}
//sort the urlIds to check the sequence they must be added
Collections.sort(urlSorted);
//checks for each url id, compares if it's on the natural order of sorting to be added.
for(Integer urlId: urlSorted) {
for (Map map : getUrlAttachments()) {
String sortedId = "U"+urlId;
String tmpId = map.get("id");
//compare the ids to add the 1, then 2, then 3...
if (map.get("id").equals(sortedId)) {
//code to save according to the sorted ids.
}
}
}