【问题标题】:Using Collections on Java, Apache FileItem sort()在 Java 上使用集合,Apache FileItem sort()
【发布时间】:2016-10-24 16:58:51
【问题描述】:

如何对 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,文件名相同,只是扩展名改变)。我需要 items 首先是 pdf,然后是 XML,但是 Windows 对文件进行排序的默认方式是按名称,如果这种排序发生变化,items 可以是 XML,然后是 PDF .

例子:

如果是按名称命名的 Windows,则 items 应该是这样的:

//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 但我真的不知道如何使用它.. ..

任何帮助将不胜感激。

【问题讨论】:

  • 你能把文件名和预期的内容贴出来
  • 当然,我补充一下错误是如何引起的,这有帮助吗?
  • 我不明白您在 Windows 资源管理器中选择的排序类型有何相关性。要选择集合中的元素,请使用比较器。如果您希望 pdf 位于 xml 之前,请确保您的比较器根据此标准对项目进行排序。
  • 谢谢@JBNizet 我会按照你说的去检查,问候!

标签: java sorting collections fileitem


【解决方案1】:

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

Collections.sort(files, NameFileComparator.NAME_COMPARATOR);

【讨论】:

  • 谢谢@mhasan,我有这个消息:没有找到适合排序的方法(List,Comparator)
  • 应该是sort(List,Comparator)
【解决方案2】:

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

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

但还是不知道如何使用 Collection...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2015-09-29
    • 2019-05-17
    • 1970-01-01
    • 2017-12-16
    • 2013-11-21
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多