一、概述
intstream.range方法是Java 8中IntStream接口提供的一个中间操作,用于生成一个指定范围内的有序整数流。具体来说,该方法的作用是生成一个从开始值开始(包括开始值)、到结束值的(不包括结束值)、以1为步长的整数流。
二、基本用法
基本用法如下:
IntStream.range(int startInclusive, int endExclusive)
其中,startInclusive表示起始数值(包括),endExclusive表示结束数值(不包括)。
例如,下面的代码将生成一个整数流,包含[0,5)范围内的整数:
IntStream.range(0, 5).forEach(System.out::println);
输出结果为:
0 1 2 3 4
三、常用操作
1. sum()
该方法返回流中所有元素的总和。例如,下面的代码将生成一个整数流,包含[0,5)范围内的整数,并计算总和:
int sum = IntStream.range(0, 5).sum(); System.out.println(sum);
输出结果为:
10
2. max()、min()
这两个方法分别返回流中最大和最小的元素值。例如,下面的代码将生成一个整数流,包含[0,5)范围内的整数,并找出其中最大和最小的元素:
int max = IntStream.range(0, 5).max().orElse(-1); int min = IntStream.range(0, 5).min().orElse(-1); System.out.println("max: " + max + ", min: " + min);
输出结果为:
max: 4, min: 0
3. filter()
该方法用于根据给定的条件过滤出符合条件的元素,返回一个新的流。例如,下面的代码将生成一个整数流,包含[0,10)范围内的整数,并过滤出其中所有偶数:
IntStream.range(0, 10) .filter(n -> n % 2 == 0) .forEach(System.out::println);
输出结果为:
0 2 4 6 8
四、进阶用法
1. rangeClosed()
与range()方法不同,这个方法包括结束值。具体来说,该方法的作用是生成一个从开始值开始(包括开始值)、到结束值的(包括结束值)、以1为步长的整数流。用法如下:
IntStream.rangeClosed(int startInclusive, int endInclusive)
例如,下面的代码将生成一个整数流,包含[0,5]范围内的整数:
IntStream.rangeClosed(0, 5).forEach(System.out::println);
输出结果为:
0 1 2 3 4 5
2. mapToObj()
该方法将一个基本类型流(IntStream、LongStream、DoubleStream)转换为一个对象流(Stream)。例如,下面的代码将生成一个整数流,包含[0,5)范围内的整数,并将其转换为一个字符串流:
Stream<String> stream = IntStream.range(0, 5) .mapToObj(String::valueOf); stream.forEach(System.out::println);
输出结果为:
0 1 2 3 4
3. toArray()
该方法将流中的元素转换为一个数组。例如,下面的代码将生成一个整数流,包含[0,5)范围内的整数,并将其转换为一个数组:
int[] array = IntStream.range(0, 5).toArray(); for (int n : array) { System.out.println(n); }
输出结果为:
0 1 2 3 4
五、注意事项
1. range()方法生成的流不包括结束值,如果需要包括结束值,请使用rangeClosed()。
2. 注意转换的数据类型是否合适,如果转换不当可能导致数据精度的丢失等问题。
3. 在多次操作中,尽量将一些常用的操作合并为一个操作,可以提高代码的可读性和效率。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/152863.html