IntStream 的方法

上一篇介绍了 Stream 的用法,为了简化基本类型流使用,以及消除频繁自动装箱、拆箱的性能损耗,JDK 提供了三种基本类型的流:IntStream、 LongStream、DoubleStream。本篇将介绍一下 IntStream 中区别于 Stream 的方法。

IntStream 中的元素类型是基本类型的 int,所以对应的方法参数从 PredicateFunctionToLongFunctionConsumerSupplier… 变成了 IntPredicateIntFunctionIntToLongFunctionIntConsumerIntSupplier…,但是用法是一样的,这里不在赘述。

range、rangeClosed

生成一个从 startInclusive 到 endExclusive 的有序的串行流。

  • range:[startInclusive, endExclusive)
  • rangeClosed:[startInclusive, endExclusive]
public static IntStream range(int startInclusive, int endExclusive);

public static IntStream rangeClosed(int startInclusive, int endInclusive);
public static void range() {
    IntStream.range(1, 3).forEach(System.out::println);

    System.out.println();

    IntStream.rangeClosed(1, 3).forEach(System.out::println);
}
1
2

1
2
3

map

  • Stream.map()Stream<T> ==> Stream<R>
  • IntStream.map()IntStream ==> IntStream
  • IntStream.mapToObj()IntStream ==> Stream<U>
// Stream.map()
<R> Stream<R> map(Function<? super T, ? extends R> mapper);

IntStream map(IntUnaryOperator mapper);

<U> Stream<U> mapToObj(IntFunction<? extends U> mapper);
public static void map() {
    IntStream intStream = IntStream.rangeClosed(1, 3)
        .map(operand -> operand * 2);

    Stream<String> stringStream = IntStream.rangeClosed(1, 3)
        .mapToObj(String::valueOf);

    intStream.forEach(System.out::println);
    System.out.println();
    stringStream.forEach(System.out::println);
}
2
4
6

1
2
3

sum

求和。

public static void sum() {
    int sum = IntStream.rangeClosed(1, 3).sum();
    System.out.println(sum);
}
6

min、max

求最大、最小值。与 Stream 的方法不同,IntStream 的方法不需要传入比较器。

public static void maxMax() {
    OptionalInt min = IntStream.rangeClosed(1, 3).min();
    OptionalInt max = IntStream.rangeClosed(1, 3).max();
    System.out.println(min);
    System.out.println(max);
}
OptionalInt[1]
OptionalInt[3]

average

求平均值。

public static void average() {
    OptionalDouble average = IntStream.rangeClosed(1, 4).average();
    System.out.println(average);
}
OptionalDouble[2.5]

summaryStatistics

求 count、sum、average、min、max

public static void summaryStatistics() {
    IntSummaryStatistics summaryStatistics = IntStream.rangeClosed(1, 4).summaryStatistics();
    System.out.println(summaryStatistics);
}
IntSummaryStatistics{count=4, sum=10, min=1, average=2.500000, max=4}

asLongStream、asDoubleStream

转成 LongStreamDoubleStream

public static void asXxxStream() {
    DoubleStream doubleStream = IntStream.rangeClosed(1, 3).asDoubleStream();
    LongStream longStream = IntStream.rangeClosed(1, 3).asLongStream();

    doubleStream.forEach(System.out::println);
    longStream.forEach(System.out::println);
}
1.0
2.0
3.0
1
2
3

boxed

IntStream 转成 Stream<Integer>

public static void boxed() {
    IntStream intStream = IntStream.rangeClosed(1, 3);
    Stream<Integer> boxed = intStream.boxed();

    boxed.forEach(System.out::println);
}
1
2
3
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值