繁体   English   中英

如何按字母顺序交互 ZipFile 内容?

[英]How to interate ZipFile content in alphabetic order?

我有一个包含数千个文件的大型.zip存档。 如何以特定顺序(例如字母升序)迭代它们?

try (ZipFile zip = new ZipFile(archive)) {
    Enumeration<? extends ZipEntry> entries = zip.entries();
    while (entries.hasMoreElements()) {
        var file = entries.nextElement();
        //...
    }
}

我发现流媒体可能是一种选择。 但是没有流媒体也有可能吗?

List<? extends ZipEntry> list = zip.stream()
        .sorted(Comparator.comparing(ZipEntry::getName))
        .collect(Collectors.toList());

没有 ZipFile 特定的方式来对 ZipFile 的条目进行排序或“读取”已排序的 ZipFile 的内容。 ZipFile Javadoc 中对排序的唯一参考是使用 ZipFile.stream 时。

在这种情况下,条目“[...] 按照它们在 ZIP 文件的中央目录中出现的顺序出现在流中。”

因此,在 Java 中排序/排序时,您只能使用通常的方法:

要么使用 stream() 方法获取流,对其进行排序并执行您的逻辑:

zip.stream()
   .sorted( Comparator.comparing( ZipEntry::getName ) ) // define your order
   .forEach( this::doStuff ); // do your logic, in this example it is a method in this class

或将枚举转换为集合并对集合进行排序,例如

List< ? extends ZipEntry > entries = Collections.list( zip.entries() );
entries.sort( Comparator.comparing( ZipEntry::getName ) ); // define your order
for (ZipEntry entry : entries) {
    doStuff(entry);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM