0

如何对 FileItem 列表进行排序?

我有下一个代码:

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);

此列表始终可以有 2 个文件(一个 PDF 和一个 XML,文件名相同,只是扩展名更改)。我需要的项目首先是 pdf,然后是 XML,但是 Windows 对文件进行排序的默认方式是按名称,如果这种排序发生变化,项目可以是 XML,然后是 PDF。

例子:

如果按名称命名的 Windows 类型,则项目应该是这样的:

在此处输入图像描述

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

但是,如果我对这样的其他事情进行排序:

在此处输入图像描述

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

谁能给我一个items.sort()方法的例子,我知道我需要一个Collection但我真的不知道如何使用它......

任何帮助将不胜感激。

4

2 回答 2

2

尝试使用 Collections API 排序,如下所示:

Collections.sort(files, NameFileComparator.NAME_COMPARATOR);
于 2016-10-24T18:05:55.500 回答
0

好吧,这不是动态修复,但可以这样完成:

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;
}

但是仍然不知道如何使用集合...

于 2016-10-24T18:50:13.813 回答