用java编程实现:利用随机函数产生数值范围在1~20之间的500个整数构成的流。对该流进行如下处理:①统计每个数值的出现次数;②求所有元素的平均值
时间: 2024-02-29 12:51:31 浏览: 26
好的,我可以为您提供Java代码实现。请注意,以下代码使用Java 8的流处理和Lambda表达式。
```java
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] arr = new Random().ints(500, 1, 21).toArray();
// 统计每个数值的出现次数
Map<Integer, Long> countMap = IntStream.of(arr)
.boxed()
.collect(Collectors.groupingBy(i -> i, Collectors.counting()));
System.out.println("每个数值的出现次数:");
countMap.forEach((k, v) -> System.out.println(k + ": " + v));
// 求所有元素的平均值
double avg = IntStream.of(arr).average().orElse(0.0);
System.out.println("所有元素的平均值:" + avg);
}
}
```
代码解析:
1. 首先,我们使用`Random`类的`ints`方法生成一个包含500个随机整数的数组。其中,第一个参数表示数组长度,第二个参数表示随机数的范围(包括1,不包括21)。
2. 接着,我们使用Java 8的流处理将数组转换为`IntStream`类型,然后使用`boxed`方法将其转换为`Stream<Integer>`类型,方便后续的`groupingBy`操作。
3. 对于第一个问题,我们使用`Collectors.groupingBy`方法和`Collectors.counting`方法实现了每个数值的出现次数的统计。其中,`groupingBy`方法根据数值进行分组,`counting`方法统计每组的数量。最终得到一个`Map<Integer, Long>`类型的结果。
4. 对于第二个问题,我们使用`average`方法求出所有元素的平均值。由于可能出现空数组的情况,因此使用`orElse`方法指定一个默认值为0.0。