Java案例如何统计集合最小值?

wen java案例 8

本文目录导读:

Java案例如何统计集合最小值?

  1. 使用Collections工具类(最常用)
  2. 使用Stream API(Java 8+)
  3. 手动遍历比较
  4. 处理不同类型集合
  5. 处理空集合和异常情况
  6. 性能对比和选择建议

我来详细介绍Java中统计集合最小值的几种方法:

使用Collections工具类(最常用)

import java.util.*;
public class MinValueExample1 {
    public static void main(String[] args) {
        // 创建集合
        List<Integer> numbers = new ArrayList<>();
        numbers.add(45);
        numbers.add(12);
        numbers.add(78);
        numbers.add(34);
        numbers.add(23);
        // 使用Collections.min()获取最小值
        Integer min = Collections.min(numbers);
        System.out.println("最小值是: " + min); // 输出: 最小值是: 12
        // 也可以直接创建集合并获取最小值
        List<Integer> list = Arrays.asList(45, 12, 78, 34, 23);
        Integer minValue = Collections.min(list);
        System.out.println("最小值: " + minValue);
    }
}

使用Stream API(Java 8+)

import java.util.*;
public class MinValueExample2 {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(45, 12, 78, 34, 23);
        // 使用Stream API获取最小值
        Optional<Integer> minOptional = numbers.stream()
                                              .min(Integer::compareTo);
        // 安全获取值
        minOptional.ifPresent(min -> System.out.println("最小值是: " + min));
        // 或者使用orElse提供默认值
        Integer min = numbers.stream()
                            .min(Integer::compareTo)
                            .orElse(0);
        System.out.println("最小值: " + min);
    }
}

手动遍历比较

import java.util.*;
public class MinValueExample3 {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(45, 12, 78, 34, 23);
        // 手动遍历找出最小值
        Integer min = numbers.get(0); // 假设第一个元素最小
        for (Integer num : numbers) {
            if (num < min) {
                min = num;
            }
        }
        System.out.println("最小值是: " + min);
    }
}
// 封装成通用方法
class MinUtils {
    public static <T extends Comparable<T>> T findMin(List<T> list) {
        if (list == null || list.isEmpty()) {
            throw new IllegalArgumentException("集合不能为空");
        }
        T min = list.get(0);
        for (T item : list) {
            if (item.compareTo(min) < 0) {
                min = item;
            }
        }
        return min;
    }
}

处理不同类型集合

import java.util.*;
public class MinValueExample4 {
    public static void main(String[] args) {
        // 处理字符串集合(按字典序)
        List<String> names = Arrays.asList("张三", "李四", "王五", "赵六");
        String minName = Collections.min(names);
        System.out.println("最小字符串: " + minName);
        // 处理自定义对象
        List<Student> students = new ArrayList<>();
        students.add(new Student("张三", 85));
        students.add(new Student("李四", 92));
        students.add(new Student("王五", 78));
        // 自定义比较规则(按成绩排序)
        Student minStudent = Collections.min(students, 
            Comparator.comparingInt(Student::getScore));
        System.out.println("最低分学生: " + minStudent.getName() + 
                         " 分数: " + minStudent.getScore());
    }
}
class Student {
    private String name;
    private int score;
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
    public String getName() { return name; }
    public int getScore() { return score; }
}

处理空集合和异常情况

import java.util.*;
public class MinValueExample5 {
    public static void main(String[] args) {
        List<Integer> emptyList = new ArrayList<>();
        List<Integer> nullList = null;
        List<Integer> normalList = Arrays.asList(5, 2, 8, 1, 9);
        // 安全获取最小值的方法
        System.out.println("空集合: " + safeGetMin(emptyList));  // 输出: Optional.empty
        System.out.println("正常集合: " + safeGetMin(normalList)); // 输出: Optional[1]
        // 处理null
        try {
            safeGetMin(nullList);
        } catch (NullPointerException e) {
            System.out.println("集合不能为null");
        }
    }
    public static <T extends Comparable<T>> Optional<T> safeGetMin(List<T> list) {
        if (list == null || list.isEmpty()) {
            return Optional.empty();
        }
        return Optional.of(Collections.min(list));
    }
}

性能对比和选择建议

方法 代码简洁性 性能 适用场景
Collections.min() 大多数场景
Stream API Java 8+,需要链式操作
手动遍历 需要自定义逻辑
自定义方法 需要复用
  1. 简单场景:使用 Collections.min() 最方便
  2. Java 8+项目:推荐使用Stream API
  3. 需要处理空值:使用Optional安全获取
  4. 自定义对象:需要实现Comparable接口或提供Comparator
  5. 大型数据集:考虑使用并行流提升性能
// 推荐的最佳实践方法
public static <T extends Comparable<T>> Optional<T> findMin(List<T> list) {
    return Optional.ofNullable(list)
                  .filter(l -> !l.isEmpty())
                  .map(Collections::min);
}

选择哪种方法取决于你的具体需求、Java版本和项目规范。

抱歉,评论功能暂时关闭!