实例玩转jdk8的Stream

Stream的意义
  • 对集合(Collection)对象功能进行增强,它专注于对集合对象进行各种非常便利、高效的聚合操作
  • 借助于Lambda 表达式,极大的提高编程效率和程序可读性
  • 函数式调用,链式调用的充分发挥
  • 函数式语言+多核时代综合影响的产物


实例玩转Stream
一、创建一个勾股数流
/**
 * 创建一个勾股数流
 *
 * @param maxLength 直角三角形斜边最大值
 * @return 一个勾股数流
 */
public static Stream<int[]> getGGStream(int maxLength) {
    return IntStream.rangeClosed(5, maxLength)
            .boxed()
            .flatMap(c -> IntStream.range(1, c)
                    .mapToObj(a -> new double[]{a, Math.sqrt(c * c - a * a), c})
                    .filter(t -> t[1] % 1 == 0 && t[0] < t[1]))
            .map(d -> new int[]{(int) d[0], (int) d[1], (int) d[2]});
}
二、创建一个斐波那契数列流
/**
 * 创建一个斐波那契数列流
 * @return 斐波那契数列流
 */
public static Stream<Integer> getFiboStream() {
    return Stream.iterate(new int[]{0, 1}, t -> new int[]{t[1], t[0] + t[1]})
            .map(t -> t[0]);
}
三、创建一个标准质数流
/**
 * 创建一个标准质数流
 * @return 标准质数流
 */
public static Stream<Integer> getPrimeStream() {
    return Stream.iterate(2, v -> v == 2 ? ++v : v + 2)
            .filter(MyStream::isPrime);
}

/**
 * 判断指定数是否为质数
 * @param candidate 待判断的数
 * @return 判断数为质数返回true, 否则返回false
 */
public static boolean isPrime(int candidate) {
    return IntStream.rangeClosed(2, (int) Math.sqrt(candidate))
            .filter(p -> p == 2 || p % 2 == 1)
            .noneMatch(p -> candidate % p == 0);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值