在Java实际开发中,ArrayList常用来保存自定义类的对象。当我们需要根据某个字段,比如学生的分数或者商品的价格,找出集合中最大值或最小值对应的对象时,有几种清晰的实现方式。下面通过具体示例来说明。

准备自定义对象与集合
首先定义一个简单的Product类,包含名称和价格两个属性,并生成构造方法与getter。
public class Product {
private String name;
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
然后创建一个ArrayList并添加一些数据:
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List<Product> list = new ArrayList<>();
list.add(new Product("键盘", 199.9));
list.add(new Product("鼠标", 89.5));
list.add(new Product("显示器", 899.0));
list.add(new Product("耳机", 159.0));
}
}
使用循环遍历查找最值
最基础的方法是使用for循环,在遍历时不断比较属性值。
Product minProduct = list.get(0);
Product maxProduct = list.get(0);
for (Product p : list) {
if (p.getPrice() < minProduct.getPrice()) {
minProduct = p;
}
if (p.getPrice() > maxProduct.getPrice()) {
maxProduct = p;
}
}
System.out.println("最低价:" + minProduct.getName() + " " + minProduct.getPrice());
System.out.println("最高价:" + maxProduct.getName() + " " + maxProduct.getPrice());
使用Stream API简化代码
Java 8引入的Stream可以一行代码完成比较,代码更简洁且易读。
import java.util.Comparator;
Product min = list.stream()
.min(Comparator.comparing(Product::getPrice))
.orElse(null);
Product max = list.stream()
.max(Comparator.comparing(Product::getPrice))
.orElse(null);
System.out.println("最低价对象:" + min.getName());
System.out.println("最高价对象:" + max.getName());
使用Collections与Comparator
如果希望直接对原列表排序后再取首尾,也可以借助Collections.sort。
import java.util.Collections; import java.util.Comparator; Collections.sort(list, Comparator.comparing(Product::getPrice)); Product first = list.get(0); Product last = list.get(list.size() - 1);
注意事项
- 使用min或max方法时,若列表可能为空,应使用orElse处理空值。
- 属性类型需正确实现比较逻辑,例如包装类或实现了Comparable的自定义类型。
- 若按多个属性查找,可使用thenComparing进一步组合条件。
通过上述方式,你可以根据实际场景选择循环、Stream或排序方案,在ArrayList中高效查找自定义对象属性对应的最小与最大值。