将迭代器公开为Iterable。
/** * Copyright (c) 2002-2013 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.io.File; import java.io.IOException; import java.util.ArrayDeque; /* from nowjava.com - 时代Java */ import java.util.ArrayList; import java.util.Collection; import java.util.Deque; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; public class Main{ /** * Exposes {@code iterator} as an {@link Iterable}. It breaks the contract * of {@link Iterable} in that it returns the supplied iterator instance for * each call to {@code iterator()} on the returned {@link Iterable} * instance. This method mostly exists to make it easy to use an * {@link Iterator} in a for-loop. * * @param <T> the type of items in the iterator. * @param iterator the iterator to expose as an {@link Iterable}. * @return the supplied iterator posing as an {@link Iterable}. */ public static <T> Iterable<T> asIterable(final Iterator<T> iterator) { return new Iterable<T>() { public Iterator<T> iterator() { return iterator; } };/*from 时 代 J a v a*/ } /** * Creates an {@link Iterable} for iterating over the lines of a text file. * @param file the file to get the lines for. * @return an {@link Iterable} for iterating over the lines of a text file. */ public static ClosableIterable<String> asIterable(final File file) { return new ClosableIterable<String>() { private ClosableIterator<String> mostRecentIterator; @Override public Iterator<String> iterator() { try { if (mostRecentIterator != null) mostRecentIterator.close(); mostRecentIterator = asIterator(file); return mostRecentIterator; } catch (IOException e) { throw new RuntimeException(e); } } @Override public void close() { if (mostRecentIterator != null) mostRecentIterator.close();