这里主要使用 Stream API 中提供的能力来计算 List 中的最大或最小值。
查找最大值
下面给出了一个包含整数数据的 list:
List<Integer> list = Arrays.asList(1,4,2,8,7,5,3);
需要找出其最大值 8 。
通过 java.util.Stream 接口提供的 max()
方法:
private static void findMax(List<Integer> list){
int max = list.stream().mapToInt(i -> i).max().orElse(0);
}
- 在列表上调用 stream() 方法以从列表中获取流
- 在流上调用 mapToInt(value -> value) 以获取整数流
- 在流上调用 max() 方法以获取最大值
- 如果没有从 max() 接收到值,返回默认值 0
查找最小值
通过 java.util.Stream 接口提供的 min()
方法:
private static void findMin(List<Integer> list){
int min = list.stream().mapToInt(i -> i).min().orElse(0);
}
自定义对象最大最小值
有时候,我们需要获取自定义对象中的最大最小值,可以参考下面的思路。
@Data
public class Animal {
private String name;
/**
* 体重
*/
private Integer weight;
}
动物的大小可以通过体重来衡量。
private static void findMaxAnimal(){
Animal dog = new Animal();
dog.setName("狗");
dog.setWeight(10);
Animal chicken = new Animal();
chicken.setName("鸡");
chicken.setWeight(2);
Animal pig = new Animal();
pig.setName("猪");
pig.setWeight(60);
List<Animal> animals = new ArrayList<>();
animals.add(dog);
animals.add(chicken);
animals.add(pig);
Animal animal = animals.stream()
.max(Comparator.comparing(Animal::getWeight))
.orElse(null);
}
忽略数据准备的部分,核心代码在最后一行:
- 在列表上调用 stream() 方法以从列表中获取流
- 在流上调用 max() 方法以获取最大值。我们传递一个比较器,它用于决定排序逻辑以决定最大值。
- 如果没有从 max() 接收到值,则返回空