从列表中查找最小和最大对象的通用类和静态方法

问题描述 投票:0回答:0

我是一个 Java 初学者,我想知道我是否正确理解了我的任务:

我需要创建一个通用类

MinMax <T but not just T>
,它将T max 和T min 的实例作为类字段。 在下一个 MinMaxService 类中,应该有一个静态方法 MinMax getMinAndMax (
List<something> elements
) - 该方法应该根据对象的自然顺序从一个对象的列表中返回最小值和最大值。 此外,getMin 和 getMax 方法需要返回“元素”列表中内容的实例,例如对于
List<String>
-> 返回一个字符串,
List<some Object>
-> 返回一个给定的对象,例如人。

下面你会找到我的代码:

public class MinMax<T extends Comparable<T>> {
*// is this a good solution? Applies to objects that support Comparable?*

        private T max;
        private T min;

        public MinMax(T max, T min) {
                this.max = max;
                this.min = min;
        }

        public T getMax() {
                return max;
        }

        public T getMin() {
                return min;
        }

}

public class MinMaxService {

    public static <T extends Comparable<T>> MinMax<T> getMinAndMax (List<T> elements) {
//*I'm not sure if this is a good solution here*

        if (elements == null || elements.isEmpty() ) {
            throw new IllegalArgumentException("List cannot be empty or null");
        }
        T min = elements.stream().min(Comparable::compareTo).get();
        T max = elements.stream().max(Comparable::compareTo).get();

        return new MinMax<T>(max, min);
    }
}

// 我还创建了一个 Person 类来测试一个对象。我不知道这是否是正确的解决方案?

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ", " + age;
    }

    @Override
    public int compareTo(Person o) {
        return Integer.compare(this.age, o.getAge());
    }
}

和我在其中创建示例列表的主类:

public class Main {
    public static void main(String[] args) {

        List<Integer> integerList = List.of(1, 5687, -2561, 25, 4);
        MinMax<Integer> minMaxInteger = MinMaxService.getMinAndMax(integerList);
        System.out.println("max Integer: " + minMaxInteger.getMax());   *result: 5687*
        System.out.println("min Integer: " + minMaxInteger.getMin());   *result: -2561*

        List<String> stringList = List.of("aaaaa", "Aaaaa", "abcde", "ABCDE");
        MinMax<String> minMaxString= MinMaxService.getMinAndMax(stringList);
        System.out.println("max String: " + minMaxString.getMax());     *result: abcde*
        System.out.println("min String: " + minMaxString.getMin());     *result: ABCDE*


        List<Person> osoby = Arrays.asList(
                new Person("Ewa", 25),
                new Person("Anna", 35),
                new Person("Adam", 30)
        );

        MinMax<Person> result = MinMaxService.getMinAndMax(osoby);
        System.out.println("youngest Person: " + result.getMin());      *result: Ewa, 25*
        System.out.println("oldest Person: " + result.getMax());        *result: Anna, 35*
    }
}
java generics comparable
© www.soinside.com 2019 - 2024. All rights reserved.