使用 Java Stream 和 Comparator 可以高效地找出对象列表中属性值的最大值和最小值。

假设有一个对象列表 List<Object> objects,其中每个对象都有一个属性值,可以通过以下步骤获取最大值和最小值:

  1. 创建一个 Comparator 对象,根据属性值进行比较。假设属性值的类型是 Integer,可以这样创建 Comparator
Comparator<Object> comparator = Comparator.comparing(obj -> ((Object) obj).getProperty());
  1. 使用 streamreduce 方法,传入一个 BinaryOperator 来实现对每个对象的属性进行比较。在这个 BinaryOperator 中,可以使用 Comparatorcompare 方法来比较属性值,并返回较大或较小的值。
Optional<Object> maxProperty = objects.stream()
        .reduce((obj1, obj2) -> comparator.compare(obj1, obj2) > 0 ? obj1 : obj2);
Optional<Object> minProperty = objects.stream()
        .reduce((obj1, obj2) -> comparator.compare(obj1, obj2) < 0 ? obj1 : obj2);
  1. 最后,可以使用 Optional 类的 get 方法获取最大和最小属性值的对象,或者使用 orElse 方法指定默认值,以防止列表为空时抛出 NoSuchElementException 异常。
Object max = maxProperty.orElse(null);
Object min = minProperty.orElse(null);

整个代码示例如下:

import java.util.Comparator;
import java.util.List;
import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        List<Object> objects = ...; // 初始化对象列表
        Comparator<Object> comparator = Comparator.comparing(obj -> ((Object) obj).getProperty());

        Optional<Object> maxProperty = objects.stream()
                .reduce((obj1, obj2) -> comparator.compare(obj1, obj2) > 0 ? obj1 : obj2);
        Optional<Object> minProperty = objects.stream()
                .reduce((obj1, obj2) -> comparator.compare(obj1, obj2) < 0 ? obj1 : obj2);

        Object max = maxProperty.orElse(null);
        Object min = minProperty.orElse(null);

        // 打印最大和最小属性值的对象
        System.out.println("Max: " + max);
        System.out.println("Min: " + min);
    }
}

请注意,这里假设对象列表中的对象都有一个名为 getProperty 的方法来获取属性值。根据实际情况,你可能需要调整代码以适应你的对象结构和属性获取方式。

Java Stream 获取对象列表中最大最小属性值

原文地址: https://www.cveoy.top/t/topic/o2hS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录