📜  Java中的 Stream skip() 方法及示例

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

Java中的 Stream skip() 方法及示例

先决条件: Java中的流
skip(long N) 是Java.util.stream.Stream对象的一个方法。此方法将一个 long (N) 作为参数,并在删除前 N 个元素后返回一个流。如果 N 的值很大,skip() 在有序并行管道上可能会非常昂贵,因为 skip(N) 被限制为跳过遇到顺序中的前 N 个元素,而不仅仅是任何 n 个元素。
注意:如果一个流包含少于 N 个元素,则返回一个空流。

句法 :

Stream skip(long N)

Where N is the number of elements to be skipped
and this function returns new stream as output.

异常:如果 N 的值为负,则函数抛出IllegalArgumentException

例1:跳过函数的实现。

// Java code for skip() function
import java.util.*;
  
class GFG {
  
    // Driver code
    public static void main(String[] args)
    {
  
        // Creating a list of integers
        List list = new ArrayList();
  
        // adding elements in the list
        list.add(-2);
        list.add(0);
        list.add(2);
        list.add(4);
        list.add(6);
        list.add(8);
        list.add(10);
        list.add(12);
        list.add(14);
        list.add(16);
  
        // setting the value of N as 4
        int limit = 4;
        int count = 0;
        Iterator it = list.iterator();
  
        // Iterating through the list of integers
        while (it.hasNext()) {
            it.next();
            count++;
  
            // Check if first four i.e, (equal to N)
            // integers are iterated.
            if (count <= limit) {
  
                // If yes then remove first N elements.
                it.remove();
            }
        }
  
        System.out.print("New stream is : ");
  
        // Displaying new stream
        for (Integer number : list) {
            System.out.print(number + " ");
        }
    }
}

输出 :

New stream is : 6 8 10 12 14 16 

应用 :

// Java code for skip() function
import java.util.stream.Stream;
import java.util.ArrayList;
import java.util.List;
 class gfg{
       
     // Function to skip the elements of stream upto given range, i.e, 3
     public static Stream skip_func(Stream ss, int range){
         return ss.skip(range);
     }
       
     // Driver code
     public static void main(String[] args){
           
         // list to save stream of strings
         List arr = new ArrayList<>();
           
         arr.add("geeks");
         arr.add("for");
         arr.add("geeks");
         arr.add("computer");
         arr.add("science");
          
         Stream str = arr.stream();
           
         // calling function to skip the elements to range 3
         Stream sk = skip_func(str,3);
         sk.forEach(System.out::println);
     }
 }

输出 :

computer
science

limit() 和 skip() 之间的区别:

  1. limit() 方法返回前 N 个元素的缩减流,但 skip() 方法在跳过前 N 个元素后返回剩余元素流。
  2. limit() 是一个短路的有状态中间操作,即,当使用无限输入进行处理时,它可能会在不处理整个输入的情况下产生一个有限流,但 skip() 是一个有状态的中间操作,即它可能需要处理在产生结果之前的整个输入。