Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从具有多个属性的列表对象获取最小/最大值_Java_Android_List_Sorting - Fatal编程技术网

Java 从具有多个属性的列表对象获取最小/最大值

Java 从具有多个属性的列表对象获取最小/最大值,java,android,list,sorting,Java,Android,List,Sorting,如果我有列表中的对象,其中每个对象都有不同的属性值,如getDistance()、getPrice()、getRating()等。我应该如何做 我已尝试重写compareTo,但它只能对一个属性进行排序 我正在尝试使用简单的加法加权方法,在这种方法中,我必须获得每个属性的最小/最大值,并使用它执行计算 谢谢大家! 如果要使用特定算法对对象列表进行排序,则可以实现自己的比较器,并使用Collection.sort()方法对列表进行排序。假设您有一个名为Container的类,它是您要比较的对象,它

如果我有列表中的对象,其中每个对象都有不同的属性值,如getDistance()、getPrice()、getRating()等。我应该如何做

我已尝试重写compareTo,但它只能对一个属性进行排序

我正在尝试使用简单的加法加权方法,在这种方法中,我必须获得每个属性的最小/最大值,并使用它执行计算


谢谢大家!

如果要使用特定算法对对象列表进行排序,则可以实现自己的比较器,并使用Collection.sort()方法对列表进行排序。假设您有一个名为Container的类,它是您要比较的对象,它有3个属性;距离、价格和等级。您将实现容器类型的自定义比较器,并定义检查2个容器对象的特定算法。我在下面写了一个例子,比较函数将所有3个属性的值相加,然后将它们除以3(在这个例子中,不需要除以3,但我把它放在这里是为了表明如果需要,可以使方程更复杂),然后比较哪一个更低,并返回一个整数,表示事实

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Container {
    private double distance;
    private double price;
    private double rating;

    public Container(double distance, double price, double rating) {
        this.distance = distance;
        this.price = price;
        this.rating = rating;
    }

    public double getDistance() {
        return distance;
    }
    public void setDistance(double distance) {
        this.distance = distance;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public double getRating() {
        return rating;
    }
    public void setRating(double rating) {
        this.rating = rating;
    }
}

class CustomComparator implements Comparator<Container> {

    @Override
    public int compare(Container o1, Container o2) {
        double avgVal1 = (o1.getDistance()+o1.getPrice()+o1.getRating())/3; 
        double avgVal2 = (o2.getDistance()+o2.getPrice()+o2.getRating())/3;
        return avgVal1 < avgVal2 ? -1 : 1;
    }
}

public class CompareTest {

    public static void main(String[] args) {
        List<Container> containerList = new ArrayList<Container>(4);
        containerList.add(new Container(2.0, 3.0, 6.0));
        containerList.add(new Container(1.0, 1.0, 1.0));
        containerList.add(new Container(6.2, 0.0, 0.0));
        containerList.add(new Container(0.0, 3.2, 1.5));
        Collections.sort(containerList, new CustomComparator());
        for(int idx=0; idx<containerList.size(); idx++){
            System.out.println("Distance:" + containerList.get(idx).getDistance() +
                               "\tPrice:" + containerList.get(idx).getPrice() +
                               "\tRating:"  + containerList.get(idx).getRating());
        }
    }
}
您可以在这里看到,列表是根据容器中的所有属性从最低到最高排序的

Distance:1.0    Price:1.0   Rating:1.0
Distance:0.0    Price:3.2   Rating:1.5
Distance:6.2    Price:0.0   Rating:0.0
Distance:2.0    Price:3.0   Rating:6.0