Java8中的Java9 'asIterator'等效实现

dgiusagp  于 2023-05-15  发布在  Java
关注(0)|答案(1)|浏览(111)

下面这段代码使用的是Java 9的asIterator()方法,有人能帮我转换下面的代码与Java 8兼容吗?

private static Function<ClassLoader, Stream<URL>> asURLs(String packageDir) {
    return cl -> {
      try {
        Iterator<URL> iterator = cl.getResources(packageDir).asIterator();
        return StreamSupport.stream(
            Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false);
      } catch (IOException e) {
        throw new UnhandledIOException(e);
      }
    };
but5z9lq

but5z9lq1#

开始,在你最喜欢的搜索引擎中查找“jdk源代码”,找到asIterator的源代码,这样你就可以复制它了。你会在这里找到它:
https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/Enumeration.java
在那里,您将找到Enumeration.asIterator(),这是一个接口默认方法。你可以在本地将它定义为一个接受Enumeration参数的方法:

private static <E> Iterator<E> asIterator(Enumeration<E> enumeration) {
    return new Iterator<>() {
        @Override public boolean hasNext() {
            return enumeration.hasMoreElements();
        }
        @Override public E next() {
            return enumeration.nextElement();
        }
    };
}

然后像这样使用它:

Iterator<URL> iterator = asIterator(cl.getResources(packageDir));

不过,@tevemadar评论时附带了一个相关问题的答案链接,可能更适合你

相关问题