2016-10-24 1 views
0

Wie kann ich eine FileItem-Liste sortieren?Verwenden von Sammlungen in Java, Apache FileItem sort()

Ich habe den nächsten Code:

import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 

Diese Liste immer 2 Dateien haben kann (ein PDF und ein XML, die Namen Dateien nur die Erweiterung ändert die gleiche ist). Ich brauche die Artikel zuerst kommen die pdf dann die XML, aber die Standardweise Windows sortieren die Dateien sind nach Name, wenn diese Art ändern, die Artikel kann XML dann PDF sein.

Beispiel:

Wenn die Art von Windows es beim Namen ist, die Artikel sollte die diese kommen mag:

enter image description here

//The expected sort 
items.get(0).getName(); //This should be equals: PAX147896.pdf 
items.get(1).getName(); //This should be equals: PAX147896.xml 

Aber wenn ich irgendwie für andere Sache wie folgt aus:

enter image description here

//The unexpected sort 
items.get(0).getName(); // PAX147896.xml 
items.get(1).getName(); // PAX147896.pdf 

Kann mir jemand ein Beispiel für geben Items.Sort() Methode, ich weiß, ich brauche eine Sammlung aber ich weiß wirklich nicht, wie es zu benutzen ....

Beliebig Hilfe wird wirklich dankbar sein.

+0

können Sie auch die Dateinamen und die in ihnen erwarteten – mhasan

+0

sicher, ich füge hinzu, wie der Fehler verursacht wird, ist das hilfreich? –

+1

Ich verstehe nicht, wie der Sortiertyp, den Sie im Windows Explorer auswählen, relevant ist. Um Elemente in einer Sammlung auszuwählen, verwenden Sie einen Vergleicher. Wenn Sie möchten, dass das PDF vor dem XML-Code steht, stellen Sie sicher, dass Ihr Vergleicher Artikel nach diesem Kriterium sortiert. –

Antwort

0

Nun, es ist nicht ein dynamisch beheben, aber es kann wie folgt geschehen:

private List<FileItem> orderFileItems(List<FileItem> items){ 
    FileItem fileXML = null; // index 1 
    FileItem filePDF = null; // index 0 
    if(items.get(0).getName().endsWith("xml") && items.get(1).getName().endsWith("pdf")){ 
     fileXML = items.get(0); 
     filePDF = items.get(1); 
     items.set(0, filePDF); 
     items.set(1, fileXML); 
    }   
    return items; 
} 

aber noch nicht wissen, wie man eine Sammlung verwendet ...

2

Versuchen Art, wie unten mit dem Collections-API Sortierung:

Collections.sort(files, NameFileComparator.NAME_COMPARATOR); 
+0

Dank @mhasan, ich habe diese Nachricht: keine geeignete Methode für die Sortierung gefunden (Liste , Comparator ) –

+0

Es sollte sort sein (Liste , Comparator ) – mhasan