給定一個迭代器,任務是將其轉換為 Java 中的 Iterables。
例子:
Input: Iterator = {1, 2, 3, 4, 5} Output: {1, 2, 3, 4, 5} Input: Iterator = {'G', 'e', 'e', 'k', 's'} Output: {'G', 'e', 'e', 'k', 's'}
以下是執行此操作的各種方法:
- 通過重寫抽象方法Iterable.iterator():
- 獲取迭代器。
- 覆蓋 Iterable.iterator() 方法並獲取可迭代對象。
- 返回可迭代對象。
下麵是上述方法的實現:
// Java program to get a Iterable // from a given Iterator import java.util.*; class GFG { // Function to get the Spliterator public static <T> Iterable<T> getIterableFromIterator(Iterator<T> iterator) { return new Iterable<T>() { @Override public Iterator<T> iterator() { return iterator; } }; } // Driver code public static void main(String[] args) { // Get the Iterator Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable<Integer> iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } }
輸出:1 2 3 4 5
- 使用 Java 8 lambda 表達式:
- 獲取迭代器。
- 使用 Lambda 表達式將迭代器轉換為可迭代。
- 返回可迭代對象。
下麵是上述方法的實現:
// Java program to get an Iterable // from a given Iterator import java.util.*; class GFG { // Function to get the Spliterator public static <T> Iterable<T> getIterableFromIterator(Iterator<T> iterator) { return () -> iterator; } // Driver code public static void main(String[] args) { // Get the Iterator Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable<Integer> iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } }
輸出:1 2 3 4 5
- 使用拆分器:
- 獲取迭代器。
- 使用 Spliterators.spliteratorUnknownSize() 方法將迭代器轉換為 Spliterator。
- 使用 StreamSupport.stream() 方法將 Spliterator 轉換為順序流。
- 使用 collect() 方法將 Sequential Stream 的元素收集為 Iterable。
- 返回可迭代對象。
下麵是上述方法的實現:
// Java program to get a Iterable // from a given Iterator import java.util.*; import java.util.stream.Collectors; import java.util.stream.StreamSupport; class GFG { // Function to get the Spliterator public static <T> Iterable<T> getIterableFromIterator(Iterator<T> iterator) { return StreamSupport // Convert the iterator into a Spliterator // and then into a sequential stream .stream(Spliterators.spliteratorUnknownSize(iterator, 0), false) // Convert the stream to an iterable .collect(Collectors.toList()); } // Driver code public static void main(String[] args) { // Get the Iterator Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5) .iterator(); // Get the Iterable from the Iterator Iterable<Integer> iterable = getIterableFromIterator(iterator); // Print the elements of Iterable iterable.forEach(System.out::println); } }
輸出:1 2 3 4 5
相關用法
- Java Iterable轉Collection用法及代碼示例
- Java Iterable轉Stream用法及代碼示例
- Java Iterable用法及代碼示例
- Java Iterable forEach()用法及代碼示例
- Java Iterator轉Stream用法及代碼示例
- Java Iterator轉List用法及代碼示例
- Java Iterator轉Spliterator用法及代碼示例
- Java TreeSet iterator()用法及代碼示例
- Java LinkedBlockingDeque iterator()用法及代碼示例
- Java IntStream iterator()用法及代碼示例
- Java AbstractSequentialList iterator()用法及代碼示例
- Java DoubleStream iterator()用法及代碼示例
- Java LongStream iterator()用法及代碼示例
- Java HashSet iterator()用法及代碼示例
- Java PriorityQueue iterator()用法及代碼示例
- Java LinkedBlockingQueue iterator()用法及代碼示例
- Java ArrayDeque iterator()用法及代碼示例
- Java ArrayBlockingQueue iterator()用法及代碼示例
注:本文由純淨天空篩選整理自RishabhPrabhu大神的英文原創作品 Convert Iterator to Iterable in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。