美文网首页bigdata
3. java8 实现求平均数(wordMean)

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

作者: 百炼 | 来源:发表于2018-12-19 17:46 被阅读0次

    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 + "]");
        }
    }
    

    相关文章

      网友评论

        本文标题:3. java8 实现求平均数(wordMean)

        本文链接:https://www.haomeiwen.com/subject/ktajkqtx.html