Java 获取 List 中最大值/最小值

这里主要使用 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() 接收到值,则返回空
转载请注明出处:码谱记录 » Java 获取 List 中最大值/最小值
标签: