多个数求平均数java_3. java8 实现求平均数(wordMean)

这篇博客介绍了如何使用Java8的Stream API来计算多个数的平均数。通过IntStream的iterate方法生成数列,然后使用boxed将整数流转换为对象流,接着通过map和reduce操作构造BoxPair对象并计算总和与计数,从而得到平均数。
摘要由CSDN通过智能技术生成

date[2018-12-19]

前期准备

1.IntStream 上的操作只能产生原始整数: IntStream 的 map 操作接受的Lambda必须接受int并返回 int(一个IntUnaryOperator )。但是你可能想要生成另一类值,比如 Dish 。为此,你需要访问 Stream接口中定义的那些更广义的操作。要把原始流转换成一般流(每个 int都会装箱成一个Integer ),可以使用 boxed方法

2.Stream API提供了两个静态方法来从函数生成流: Stream.iterate和 Stream.generate 。

这两个操作可以创建所谓的无限流:不像从固定集合创建的流那样有固定大小的流。由 iterate

和 generate 产生的流会用给定的函数按需创建值,因此可以无穷无尽地计算下去!一般来说,

应该使用 limit(n)来对这种流加以限制,以避免打印无穷多个值。

IntStream intStream = IntStream.iterate(0, n -> n + 2).limit(10);

Stream boxed = IntStream.iterate(0, n -> n + 2).limit(10).boxed();

DoubleStream generate = DoubleStream.generate(Math::random);

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值