java - 如何优化两个相似的方法?

标签 java

Java 7 不支持 lambda 表达式。如何优化两个类似的方法“GetMinOfList”和“GetMaxOfList”?

package com.example;

import java.util.ArrayList;
import java.util.List;

public class MinMax<T extends Comparable<T>> {

    private List<T> lst = null;
    public MinMax(List<T> com)
    {
        this.lst = com;
    }

    public Pair<T, T> GetMinMaxOfList()
    {
        return GetMinMaxOfList(this.lst);
    }

    private Pair<T, T> GetMinMaxOfList(List<T> list)
    {
        if(list == null || list.size() == 1)
            return null;
        //Pair<T, T>  minMax = new Pair<T, T>();
        T min, max;
        if(list.size() == 2)
        {
            if(list.get(0).compareTo(list.get(1)) < 0)
            {
                min = list.get(0);
                max = list.get(1);
                return new Pair<T,T>(min, max);
            }
        }
        //T sentry = list.get(0);
        min = GetMinOfList(list);
        max = GetMaxOfList(list);
        return new Pair<T, T>(min, max);
    }

    private T GetMinOfList(List<T> littleList)
    {
        T sentry = littleList.get(0);
        if(littleList.size() == 1)
            return sentry;

        List<T> nextLittle = new ArrayList<T>(1);
        for(T t: littleList)
        {
            if(t.compareTo(sentry) < 0)
                nextLittle.add(t);
        }
        if(nextLittle.size() == 0)
            return sentry;
        return GetMinOfList(nextLittle);
    }

    private T GetMaxOfList(List<T> lagerList)
    {
        T sentry = lagerList.get(0);
        if(lagerList.size() == 1)
            return sentry;

        List<T> nextLarge = new ArrayList<T>(1);
        for(T t: lagerList)
        {
            if(t.compareTo(sentry) > 0)
                nextLarge.add(t);
        }
        if(nextLarge.size() == 0)
            return sentry;
        return GetMaxOfList(nextLarge);
    }
}

最佳答案

代码更少?您可以用以下方法替换这些方法:

 min = Collections.min(list); 
 max = Collections.max(list);

尽管假设 T 实现了 Comparable。正如 Luiggi Mendoza 指出的那样:您还可以实现一个比较器,并通过其他形式的最小/最大来使用它,如果没有:

 min = Collections.min(list, comparator); 
 max = Collections.max(list, comparator);

关于java - 如何优化两个相似的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018838/

相关文章:

Uniobjects for Java 的 Javadoc

Java递归参数

java - 为什么我运行 spring 和 Hibernate 项目时未创建数据库或表

java - 如何创建包含未知枚举数组的 Java 注释?

java - 使用 Spring MVC 在 JSP 中设置 HTML 链接

java - 如何将字符串分成每三个单词(JAVA)

java - 如何在特定时间内运行任务

java - Java 8 函数式风格的冒泡排序

java - 如何同时(或关闭时间)启动两个线程

java - 从 JSP 中的数组输出一个字符串