📌  相关文章
📜  在Java中以相反的顺序迭代列表

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

在Java中以相反的顺序迭代列表

List 接口提供了一种存储有序集合的方法它是 Collection 的子接口。它是一个有序的对象集合,可以在其中存储重复的值。由于 List 保留了插入顺序,因此它允许元素的位置访问和插入。

例子

Input: ["geeks", "for", "Geeks"]
Output: ["Geeks", "for", "geeks"]
 
Input: [ 1, 2, 3, 4, 5]
output: [5, 4, 3, 2, 1]

我们可以通过两种方式以相反的顺序迭代列表:

  1. 使用 List.listIterator() 和使用 for循环 方法。
  2.  使用 IntStream range(int startInclusive, int endExclusive)。

方法一:使用List.listIterator() 和使用for 循环方法。

句法:

public ListIterator listIterator()

返回值:此方法返回此列表中元素的列表迭代器(以适当的顺序)。

  • 这允许双向访问。
  • List.listIterator() 方法用于从列表中的指定位置开始对列表中的元素获取 ListIterator。如果我们需要从最后一个元素开始,起始索引将等于列表的大小。

句法:

ListIterator listIterator( Index )

Index = Index from where list element will reverse till index = 0.
Java
// Java program to iterate List in Reverse Order
  
import java.util.*;
  
class GFG {
  
    public static void main(String[] args)
    {
  
        // For ArrayList
        List list = new ArrayList();
  
        // Add elements to list
        list.add("GEEKS");
        list.add("for");
        list.add("geeks");
  
        // Generate an iterator to iterate List in reverse
        // order
        ListIterator gfg_itr
            = list.listIterator(list.size());
  
        // hasPrevious() returns true if the list has
        // previous element
        while (gfg_itr.hasPrevious()) 
        {
            // Iterate in reverse
            System.out.println(gfg_itr.previous());
        }
  
        // print list in Reverse using for loop
        for (int i = list.size() - 1; i >= 0; i--)
        {
            // access elements by their index (position)
            System.out.println(list.get(i));
        }
    }
}


Java
// Java Program to iterate List in reverse order
  
import java.util.*;
import java.util.stream.IntStream;
  
class GFG {
  
    public static void main(String[] args)
    {
  
        // For ArrayList
        List list_li = new ArrayList();
  
        // Add elements to list
        list_li.add(1);
        list_li.add(2);
        list_li.add(3);
        list_li.add(4);
        list_li.add(5);
  
        // Creating an IntStream
        IntStream stream = IntStream.range(0, list_li.size());
  
        // Displaying the elements in range
        // including the lower bound but
        // excluding the upper bound
        stream.map(i -> list_li.size() - i - 1).map(list_li::get)
            .forEach(System.out::println);
    }
}


输出
geeks
for
GEEKS
geeks
for
GEEKS

方法二:使用IntStream range(int startInclusive, int endExclusive)

  • 这将按增量步长 1 返回从 startInclusive(包含)到 endExclusive(不包含)的顺序有序 IntStream。它正确处理溢出。

句法 :

static IntStream range(int startInclusive,   int endExclusive)

参数 :

  • IntStream :原始 int 值元素的序列。
  • startInclusive :包含的初始值。
  • endExclusive :独占上限。

Java

// Java Program to iterate List in reverse order
  
import java.util.*;
import java.util.stream.IntStream;
  
class GFG {
  
    public static void main(String[] args)
    {
  
        // For ArrayList
        List list_li = new ArrayList();
  
        // Add elements to list
        list_li.add(1);
        list_li.add(2);
        list_li.add(3);
        list_li.add(4);
        list_li.add(5);
  
        // Creating an IntStream
        IntStream stream = IntStream.range(0, list_li.size());
  
        // Displaying the elements in range
        // including the lower bound but
        // excluding the upper bound
        stream.map(i -> list_li.size() - i - 1).map(list_li::get)
            .forEach(System.out::println);
    }
}
输出
5
4
3
2
1

注意: IntStream range(int startInclusive, int endExclusive) 基本上像 for 循环一样工作。可以按顺序生成等效的递增值序列,如下所示:

for (int i = startInclusive; i < endExclusive ; i++) 
{
 ...
 ...
 ...
}