Java 使用Comparator比较对象中的浮动列表

Java 使用Comparator比较对象中的浮动列表,java,Java,您好,我正在尝试对一个浮动列表进行排序,从数组列表中的最高值开始,然后到最低值 CustomObject保存一个对象,该对象的值为float 到目前为止,我正在做这件事(失败了,什么也没做) Collections.sort(自然电阻框,新比较器(){ 公共整数比较(百分比框o1,百分比框o2){ 返回1.mCountry.m自然阻力 o2.mCountry.mNaturalResistance?1:0; } }); 有人能告诉我哪里出了问题吗?您的代码工作得很好: import java.u

您好,我正在尝试对一个浮动列表进行排序,从数组列表中的最高值开始,然后到最低值

CustomObject保存一个对象,该对象的值为float

到目前为止,我正在做这件事(失败了,什么也没做)

Collections.sort(自然电阻框,新比较器(){
公共整数比较(百分比框o1,百分比框o2){
返回1.mCountry.m自然阻力
o2.mCountry.mNaturalResistance?1:0;
}
});

有人能告诉我哪里出了问题吗?

您的代码工作得很好:

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

public class Snippet {

    static class Country {

        float mNaturalResistance;
    }

    static class PercentageBox {

        Country mCountry = new Country();
    }

    public static void main(final String[] args) {
        List< PercentageBox > mNaturalResistanceBoxes = new ArrayList< Snippet.PercentageBox >();
        for (int i = 0; i < 4; i++) {
            mNaturalResistanceBoxes.add(new PercentageBox());
        }

        mNaturalResistanceBoxes.get(0).mCountry.mNaturalResistance = 3.3f;
        mNaturalResistanceBoxes.get(1).mCountry.mNaturalResistance = 2.2f;
        mNaturalResistanceBoxes.get(2).mCountry.mNaturalResistance = 4.4f;
        mNaturalResistanceBoxes.get(3).mCountry.mNaturalResistance = 1.1f;

        Collections.sort(mNaturalResistanceBoxes, new Comparator< PercentageBox >() {

            @Override
            public int compare(final PercentageBox o1, final PercentageBox o2) {
                return o1.mCountry.mNaturalResistance < o2.mCountry.mNaturalResistance ? -1
                    : o1.mCountry.mNaturalResistance > o2.mCountry.mNaturalResistance ? 1 : 0;
            }
        });

        for (PercentageBox box : mNaturalResistanceBoxes) {
            System.out.println(box.mCountry.mNaturalResistance);
        }
    }
}

您的代码可以完美地工作:

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

public class Snippet {

    static class Country {

        float mNaturalResistance;
    }

    static class PercentageBox {

        Country mCountry = new Country();
    }

    public static void main(final String[] args) {
        List< PercentageBox > mNaturalResistanceBoxes = new ArrayList< Snippet.PercentageBox >();
        for (int i = 0; i < 4; i++) {
            mNaturalResistanceBoxes.add(new PercentageBox());
        }

        mNaturalResistanceBoxes.get(0).mCountry.mNaturalResistance = 3.3f;
        mNaturalResistanceBoxes.get(1).mCountry.mNaturalResistance = 2.2f;
        mNaturalResistanceBoxes.get(2).mCountry.mNaturalResistance = 4.4f;
        mNaturalResistanceBoxes.get(3).mCountry.mNaturalResistance = 1.1f;

        Collections.sort(mNaturalResistanceBoxes, new Comparator< PercentageBox >() {

            @Override
            public int compare(final PercentageBox o1, final PercentageBox o2) {
                return o1.mCountry.mNaturalResistance < o2.mCountry.mNaturalResistance ? -1
                    : o1.mCountry.mNaturalResistance > o2.mCountry.mNaturalResistance ? 1 : 0;
            }
        });

        for (PercentageBox box : mNaturalResistanceBoxes) {
            System.out.println(box.mCountry.mNaturalResistance);
        }
    }
}

你知道浮动不是完全有序的,对吧?如果你把NaN也包括进来,这甚至不是预购。没有意义,完全有序吗?@OllyDixon一切似乎都很好。您是否有任何错误或未排序?发生的事情我没有得到任何错误,只是什么都没有发生。可读性越来越低的代码:
返回Float.compare(o1.mccountry.mNaturalResistance,o2.mccountry.mNaturalResistance)在你的比较器中。你知道浮动不是完全有序的,对吗?如果你把NaN也包括进来,这甚至不是预购。没有意义,完全有序吗?@OllyDixon一切似乎都很好。您是否有任何错误或未排序?发生的事情我没有得到任何错误,只是什么都没有发生。可读性越来越低的代码:
返回Float.compare(o1.mccountry.mNaturalResistance,o2.mccountry.mNaturalResistance)在比较器中。
1.1
2.2
3.3
4.4