Java 把Iterator转换为Iterable

Java 把Iterator转换为Iterable

给定一个Iterator,任务是在Java中把它转换成Iterables。

例子。

输入: Iterator = {1, 2, 3, 4, 5}
输出: {1, 2, 3, 4, 5}

输入: Iterator = {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}
输出: {‘G’, ‘e’, ‘e’, ‘k’, ‘s’}

以下是各种方法。

  • 通过重写抽象方法Iterable.iterator()。
    1. 获取迭代器。
    2. 覆盖Iterable.iterator()方法并获得迭代器。
    3. 返回Iterable。

下面是上述方法的实现。

// 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表达式。
    1. 获取迭代器。
    2. 使用Lambda表达式将迭代器转换为可迭代器。
    3. 返回Iterable。

下面是上述方法的实现。

// 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
  • 使用分裂器:
    1. 获取迭代器。
    2. 使用Spliterators.splitatorUnknownSize()方法将迭代器转换为Spliterator。
    3. 使用StreamSupport.stream()方法将Spliterator转换成顺序流。
    4. 使用collect()方法将序列流的元素收集为一个Iterable。
    5. 返回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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程