本文主要介绍Java中,Stream.of()和IntStream.range()使用方法和区别,以及相关的示例代码。

1、Stream.of()的使用

Stream.of()方法,其生成的Stream是有限长度的,Stream的长度为其内的元素个数。

of(T... values):返回含有多个T元素的Stream

of(T t):返回含有一个T元素的Stream

例如,

import java.util.*;
import java.util.stream.IntStream;
public class Demo {
   public static void main(String[] args) {
      IntStream intStream = IntStream.of(10, 20, 30, 40, 50);
      intStream.forEach(System.out::println);
   }
}

2、IntStream.range()的使用

IntStream range(int startInclusive,int endExclusive)以1为增量步长从startInclusive(包括)到endExclusive(不包括)返回顺序的有序IntStream。

例如,

import java.util.*; 
import java.util.stream.IntStream; 
class Demo { 
    public static void main(String[] args) 
    { 
        // 创建 IntStream 
        IntStream stream = IntStream.range(6, 10); 
        stream.forEach(System.out::println); 
    } 
}

3、Stream.of()和IntStream.range()区别

通过下面代码可以看出Stream.of()IntStream.range()区别.

例如,

import java.util.*;
import java.util.stream.IntStream;
public class Demo { 
  public static void main(String[] args) { 
    System.out.println("#1");
    IntStream.of(0, 1, 2, 3)
            .peek(e -> System.out.println(e))
            .sorted()
            .findFirst();
    System.out.println("\n#2");
    IntStream.range(0, 4)
            .peek(e -> System.out.println(e))
            .sorted()
            .findFirst();
      
  } 
}

输出:

#1
0
1
2
3
#2
0

区别:

IntStream.range()返回一个从startInclusive(包含)到endExclusive (不包含)的顺序有序的IntStream,递增一步为1,说明它已经排序。既然已经排序了,那么下面的.sorted()中间操作什么都不做是有道理的。所以peek()只在第一个元素上执行(因为最后的操作只需要第一个元素)。

Stream.of()不一定已排序(并且该of()方法不检查它们是否已排序)。因此,.sorted()必须遍历所有元素才能产生排序Stream,这允许findFirst()终端操作返回排序Stream的第一个元素。结果,peek对所有元素都执行,即使最后的操作只需要第一个元素。