IntStream
是 Java 8 引入的一种流(Stream)类型,专门用于处理基本数据类型 int
。与 Stream<Integer>
不同,IntStream
在处理整数时避免了装箱和拆箱的开销,因此在性能上通常更优。
IntStream
在处理大量整数时性能更好。IntStream
支持并行流(Parallel Stream),可以利用多核处理器提高处理速度。IntStream
主要有以下几种类型:
当需要对两个列表中的整数进行各种操作(如过滤、映射、聚合等)时,可以使用 IntStream
来提高性能和简化代码。
假设我们有两个整数列表 list1
和 list2
,我们希望将它们合并并进行一些操作:
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
public class IntStreamExample {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(6, 7, 8, 9, 10);
// 将两个列表转换为 IntStream
IntStream stream1 = list1.stream().mapToInt(Integer::intValue);
IntStream stream2 = list2.stream().mapToInt(Integer::intValue);
// 合并两个 IntStream
IntStream combinedStream = IntStream.concat(stream1, stream2);
// 计算总和
int sum = combinedStream.sum();
System.out.println("Sum: " + sum);
// 过滤出大于 5 的数
IntStream filteredStream = combinedStream.filter(x -> x > 5);
System.out.println("Filtered numbers: " + filteredStream.boxed().toList());
}
}
IntStream
而不是 Stream<Integer>
?原因:IntStream
避免了装箱和拆箱的开销,因此在处理大量整数时性能更好。
解决方法:使用 mapToInt
方法将 Stream<Integer>
转换为 IntStream
。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
IntStream intStream = list.stream().mapToInt(Integer::intValue);
IntStream
转换回 List<Integer>
?原因:有时需要将处理后的 IntStream
转换回 List<Integer>
进行进一步操作。
解决方法:使用 boxed
方法将 IntStream
转换为 Stream<Integer>
,然后收集到列表中。
IntStream intStream = IntStream.of(1, 2, 3, 4, 5);
List<Integer> list = intStream.boxed().collect(Collectors.toList());
通过以上方法,可以充分利用 IntStream
的优势,提高代码的性能和可读性。
领取专属 10元无门槛券
手把手带您无忧上云