java中stream()获取float最大值
时间: 2023-11-25 11:15:06 浏览: 216
可以使用Java中的Stream来获取float类型的最大值,具体代码如下:
```java
float[] arr = {3.2f, 1.5f, 9.4f, 5.8f, 2.7f};
float max = Arrays.stream(arr).max().getAsFloat();
System.out.println(max);
```
这段代码首先定义了一个float类型的数组arr,然后使用Stream的max()方法来获取arr中的最大值,并使用getAsFloat()方法将结果转换为float类型,最后将结果打印出来。
相关问题
定义一个大小为100的float类型的二维数组,使用随机数赋值,java至少用两种方法计算二维数组每行和每列的平均值、标准差、最大值和最小值,并输出。 要求:必须用遍历的方法计算各统计量,另外一种方法可以用stream来计算或第三方类库(apache math3):
在Java中,我们可以使用两种方法来完成这个任务:
1. 使用传统循环遍历(手动计算):
```java
import java.util.Random;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
float[][] array = new float[10][100];
Random rand = new Random();
// 初始化二维数组并设置随机值
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 100; j++) {
array[i][j] = rand.nextFloat();
}
}
// 手动计算统计量
for (int row = 0; row < 10; row++) {
double sumRow = 0;
for (float value : array[row]) {
sumRow += value;
}
double meanRow = sumRow / 100.0;
double stdDevRow = calculateStandardDeviation(array[row], meanRow);
double maxRow = Arrays.stream(array[row]).max().orElseThrow(IllegalStateException::new);
double minRow = Arrays.stream(array[row]).min().orElseThrow(IllegalStateException::new);
System.out.printf("Row %d: Mean: %.2f, Std Dev: %.2f, Max: %.2f, Min: %.2f\n", row + 1, meanRow, stdDevRow, maxRow, minRow);
}
// 计算列的统计量类似,这里省略
}
private static double calculateStandardDeviation(float[] values, double mean) {
double sumOfSquares = 0;
for (float value : values) {
sumOfSquares += Math.pow(value - mean, 2);
}
return Math.sqrt(sumOfSquares / values.length);
}
}
```
2. 使用Stream API(Apache Commons Math3不是Java内置的一部分,这里假设已经引入了相关依赖):
```java
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
// ... (初始化二维数组部分)
// 使用Apache Commons Math3计算统计量
DescriptiveStatistics stats = new DescriptiveStatistics();
for (int i = 0; i < 10; i++) {
for (float value : array[i]) {
stats.addValue(value);
}
double meanRow = stats.getMean();
double stdDevRow = stats.getStandardDeviation();
double maxRow = stats.getMax();
double minRow = stats.getMin();
System.out.printf("Row %d: Mean: %.2f, Std Dev: %.2f, Max: %.2f, Min: %.2f\n", i + 1, meanRow, stdDevRow, maxRow, minRow);
stats.clear(); // 清空统计信息以便处理下一行
}
}
}
```
注意:Apache Commons Math3需要额外安装和导入,如果项目未包含该库,你需要先添加依赖或者使用Java自带的`Math`类进行简单的标准差计算。
定义重载方法getMax(),要求如下: 返回元素是int类型的一维数组的最大值; 返回元素是doule类型的二维数组的最大值; 返回元素是float类型的Vector中的最大值; 返回元素是String类型的二维数组的最大字符串
在Java中,为了实现这个需求,你可以定义一个包含泛型的方法,因为Java支持方法的重载(Overloading)。这样可以处理不同数据类型的数组和集合。以下是四个`getMax()`方法的示例:
1. 对于整数一维数组:
```java
public int getMax(int[] arr) {
if (arr != null && arr.length > 0) {
return Arrays.stream(arr).max().orElse(Integer.MIN_VALUE);
}
throw new IllegalArgumentException("Array must not be empty or null");
}
```
2. 对于双精度浮点型二维数组:
```java
public double getMax(double[][] arr) {
if (arr != null && arr.length > 0) {
return Arrays.stream(arr).flatMapToDouble(Arrays::stream)
.max().orElse(Double.NEGATIVE_INFINITY);
}
throw new IllegalArgumentException("Array must not be empty or null");
}
```
3. 对于单精度浮点型的Vector:
```java
import java.util.ArrayList;
import java.util.List;
public float getMax(Vector<Float> vector) {
if (vector != null && !vector.isEmpty()) {
return Collections.max(vector.elements(), Float::compareTo);
}
throw new IllegalArgumentException("Vector must not be empty or null");
}
// Vector类假设已经存在,例如来自Apache Commons Lang库
class Vector<T extends Comparable<T>> {
private List<T> elements;
// ...其他方法...
}
```
4. 对于字符串二维数组:
```java
public String getMax(String[][] strArr) {
if (strArr != null && strArr.length > 0) {
return Arrays.stream(strArr)
.mapToInt(row -> row.length > 0 ? row[0].length() : 0)
.max().orElse(0)
+ " character string";
}
throw new IllegalArgumentException("Array must not be empty or null");
}
```
阅读全文