📜  在Java中将迭代器转换为列表

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

在Java中将迭代器转换为列表

给定一个迭代器,任务是将其转换为Java中的 List 。

例子:

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'}

以下是执行此操作的各种方法:

  • 天真的方法
    1. 获取迭代器。
    2. 创建一个空列表。
    3. 使用 forEachRemaining() 方法将迭代器的每个元素添加到列表中。
    4. 返回列表。

    下面是上述方法的实现:

    // Java program to get a List
    // from a given Iterator
      
    import java.util.*;
      
    class GFG {
      
        // Function to get the List
        public static  List
        getListFromIterator(Iterator iterator)
        {
      
            // Create an empty list
            List list = new ArrayList<>();
      
            // Add each element of iterator to the List
            iterator.forEachRemaining(list::add);
      
            // Return the List
            return list;
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the List from the Iterator
            List
                list = getListFromIterator(iterator);
      
            // Print the list
            System.out.println(list);
        }
    }
    
    输出:
    [1, 2, 3, 4, 5]
    
  • 使用 Iterable 作为中间
    1. 获取迭代器。
    2. 使用 lambda 表达式将迭代器转换为可迭代。
    3. 使用 Stream 将可迭代对象转换为列表。
    4. 返回列表。

    下面是上述方法的实现:

    // Java program to get a List
    // from a given Iterator
      
    import java.util.*;
    import java.util.stream.Collectors;
    import java.util.stream.StreamSupport;
      
    class GFG {
      
        // Function to get the List
        public static  List
        getListFromIterator(Iterator iterator)
        {
      
            // Convert iterator to iterable
            Iterable iterable = () -> iterator;
      
            // Create a List from the Iterable
            List list = StreamSupport
                               .stream(iterable.spliterator(), false)
                               .collect(Collectors.toList());
      
            // Return the List
            return list;
        }
      
        // Driver code
        public static void main(String[] args)
        {
      
            // Get the Iterator
            Iterator
                iterator = Arrays.asList(1, 2, 3, 4, 5)
                               .iterator();
      
            // Get the List from the Iterator
            List
                list = getListFromIterator(iterator);
      
            // Print the list
            System.out.println(list);
        }
    }
    
    输出:
    [1, 2, 3, 4, 5]