📌  相关文章
📜  在Java中将 Iterator 转换为 Iterable

📅  最后修改于: 2022-05-13 01:55:30.954000             🧑  作者: Mango

在Java中将 Iterator 转换为 Iterable

给定一个迭代器,任务是将其转换为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()
    1. 获取迭代器。
    2. 覆盖 Iterable.iterator() 方法并获取可迭代对象。
    3. 返回可迭代对象。

    下面是上述方法的实现:

    // Java program to get a Iterable
    // from a given Iterator
      
    import java.util.*;
      
    class GFG {
      
        // Function to get the Spliterator
        public static  Iterable
        getIterableFromIterator(Iterator iterator)
        {
            return new Iterable() {
                @Override
                public Iterator iterator()
                {
                    return iterator;
                }
            };
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the Iterable from the Iterator
            Iterable
                iterable = getIterableFromIterator(iterator);
      
            // Print the elements of Iterable
            iterable.forEach(System.out::println);
        }
    }
    
    输出:
    1
    2
    3
    4
    5
    
  • 使用Java 8 lambda 表达式
    1. 获取迭代器。
    2. 使用 Lambda 表达式将迭代器转换为可迭代。
    3. 返回可迭代对象。

    下面是上述方法的实现:

    // Java program to get an Iterable
    // from a given Iterator
      
    import java.util.*;
      
    class GFG {
      
        // Function to get the Spliterator
        public static  Iterable
        getIterableFromIterator(Iterator iterator)
        {
            return () -> iterator;
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the Iterable from the Iterator
            Iterable
                iterable = getIterableFromIterator(iterator);
      
            // Print the elements of Iterable
            iterable.forEach(System.out::println);
        }
    }
    
    输出:
    1
    2
    3
    4
    5
    
  • 使用拆分器
    1. 获取迭代器。
    2. 使用 Spliterators.spliteratorUnknownSize() 方法将迭代器转换为 Spliterator。
    3. 使用 StreamSupport.stream() 方法将 Spliterator 转换为顺序流。
    4. 使用 collect() 方法将顺序流的元素收集为 Iterable。
    5. 返回可迭代对象。

    下面是上述方法的实现:

    // 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  Iterable
        getIterableFromIterator(Iterator 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
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the Iterable from the Iterator
            Iterable
                iterable = getIterableFromIterator(iterator);
      
            // Print the elements of Iterable
            iterable.forEach(System.out::println);
        }
    }
    
    输出:
    1
    2
    3
    4
    5