3. java8 实现求平均数(wordMean)

date[2018-12-19]

前期准备

1.IntStream 上的操作只能产生原始整数: IntStreammap 操作接受的Lambda必须接受int并返回 int(一个IntUnaryOperator )。但是你可能想要生成另一类值,比如 Dish 。为此,你需要访问 Stream接口中定义的那些更广义的操作。要把原始流转换成一般流(每个 int都会装箱成一个Integer ),可以使用 boxed方法
2.Stream API提供了两个静态方法来从函数生成流: Stream.iterateStream.generate
这两个操作可以创建所谓的无限流:不像从固定集合创建的流那样有固定大小的流。由 iterate
generate 产生的流会用给定的函数按需创建值,因此可以无穷无尽地计算下去!一般来说,
应该使用 limit(n)来对这种流加以限制,以避免打印无穷多个值。

        IntStream intStream = IntStream.iterate(0, n -> n + 2).limit(10);
        Stream<Integer> boxed = IntStream.iterate(0, n -> n + 2).limit(10).boxed();
        
        DoubleStream generate = DoubleStream.generate(Math::random);
        Stream<Double> generateBox = Stream.generate(Math::random);

使用java8的方式求平均数

package action.mapreduce;

import org.junit.Test;
import java.util.stream.IntStream;
import java.util.stream.Stream;

class BoxPair {
    Integer data;
    Integer count;

    public BoxPair(Integer data, Integer count) {
        this.data = data;
        this.count = count;
    }
}
public class WordMean {
    /**
     * 使用new的方式构造BoxPair
     */
    @Test
    public void testWordMean1() {
        Stream<Integer> boxed = IntStream.iterate(0, n -> n + 2).limit(10).boxed();
        BoxPair reduce = boxed
                .map(val -> {
                    return new BoxPair(val, 1);
                }).reduce(new BoxPair(0, 0), (p, n) -> {
                    return new BoxPair(p.data + n.data, p.count + n.count);
                });

        System.out.println("Pair: data[" + reduce.data + "],count[" + reduce.count + "]");
    }

    /**
     * 使用Lambda表达式的形成构造BoxPair
     */
    @Test
    public void testWordMean2() {
        Stream<Integer> boxed = IntStream.iterate(0, n -> n + 2).limit(10).boxed();
        BoxPair reduce = boxed
                .map((v) -> new BoxPair(v, 1))
                .reduce(new BoxPair(0, 0), (p, n) ->
                        new BoxPair(p.data + n.data, p.count + n.count));

        System.out.println("Pair: data[" + reduce.data + "],count[" + reduce.count + "]");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.数值流   我们在前面看到了可以使用reduce方法计算流中元素的总和。例如,你可以像下面这样计算菜单的热量:...
    琼珶和予阅读 4,798评论 0 0
  • Java8 in action 没有共享的可变数据,将方法和函数即代码传递给其他方法的能力就是我们平常所说的函数式...
    铁牛很铁阅读 5,033评论 1 2
  • 概要 流让你从外部迭代转向内部迭代。这样,你就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了: 现...
    浔它芉咟渡阅读 5,435评论 1 2
  • 第一章 为什么要关心Java 8 使用Stream库来选择最佳低级执行机制可以避免使用Synchronized(同...
    谢随安阅读 5,364评论 0 4
  • 本文主要总结了《Java8实战》,适用于学习 Java8 的同学,也可以作为一个 API 手册文档适用,平时使用时...
    _晓__阅读 5,795评论 2 7

友情链接更多精彩内容