Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.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 按字母顺序排序Enum.values(),然后将其添加到微调器ArrayAdapter_Java_Android_Enums - Fatal编程技术网

Java 按字母顺序排序Enum.values(),然后将其添加到微调器ArrayAdapter

Java 按字母顺序排序Enum.values(),然后将其添加到微调器ArrayAdapter,java,android,enums,Java,Android,Enums,我正在开发一个与Web服务一起工作的Android应用程序 我想按其描述按字母顺序对枚举.values()进行排序 我有这个Enum: public enum Stature { tall (0, MSDApplication.getAppContext().getString(R.string.stature_tall)), average(1, MSDApplication.getAppContext().getString(R.string.stature_average)

我正在开发一个与Web服务一起工作的Android应用程序

我想按其描述按字母顺序对枚举.values()进行排序

我有这个
Enum

public enum Stature
{
    tall (0, MSDApplication.getAppContext().getString(R.string.stature_tall)),
    average(1, MSDApplication.getAppContext().getString(R.string.stature_average)),
    small(2, MSDApplication.getAppContext().getString(R.string.stature_small));

    private final int stature;
    private final String statureString;

    Stature(int anStature, String anStatureString) { stature = anStature; statureString = anStatureString; }

    public int getValue() { return stature; }

    @Override
    public String toString() { return statureString; }
}
也许,这不是使用
Enum
的最佳选择,但我对Java开发非常陌生

您知道我如何使用其
高度限制对其进行字母排序吗?

我之所以要这样做,是因为我想在
ArrayAdapter
上使用这些
Enum.values()

mSpinStature.setAdapter(new ArrayAdapter<Stature>(mActivity, android.R.layout.simple_dropdown_item_1line, Stature.values()));

向枚举添加一个方法怎么样

enum Stature {
    tall, average, small;

    public static Stature[] getSortedVaules() {
        Stature[] statures = values();
        Arrays.sort(statures, EnumByNameComparator.INSTANCE);
        return statures;
    }

    private static class EnumByNameComparator implements Comparator<Enum<?>> {

        public static final Comparator<Enum<?>> INSTANCE = new EnumByNameComparator();

        public int compare(Enum<?> enum1, Enum<?> enum2) {
            return enum1.name().compareTo(enum2.name());
        }

    }

}

public class StatureTest {

    @Test
    public void getSortedValues() {
        Stature[] normalValues = Stature.values();
        Assert.assertEquals(Stature.tall, normalValues[0]);
        Assert.assertEquals(Stature.average, normalValues[1]);
        Assert.assertEquals(Stature.small, normalValues[2]);

        Stature[] sortedVaules = Stature.getSortedVaules();
        Assert.assertEquals(Stature.average, sortedVaules[0]);
        Assert.assertEquals(Stature.small, sortedVaules[1]);
        Assert.assertEquals(Stature.tall, sortedVaules[2]);
    }
}
enum身高{
高,一般,小;
公众静态状态[]getSortedVaules(){
身高[]身高=数值();
sort(statures,EnumByNameComparator.INSTANCE);
回归身材;
}
私有静态类EnumByNameComparator实现Comparator>INSTANCE=new EnumByNameComparator();
公共整数比较(枚举1、枚举2){
返回enum1.name().compareTo(enum2.name());
}
}
}
公开课再测验{
@试验
public void getSortedValues(){
身高[]正常值=身高.values();
Assert.assertEquals(身高,正常值[0]);
Assert.assertEquals(身高、平均值、正常值[1]);
Assert.assertEquals(Stature.small,normalvalue[2]);
身材[]分类包袱=身材。GetSorted包袱();
Assert.assertEquals(身高、平均体重、分类体重[0]);
Assert.assertEquals(身高、身高、体重[1]);
Assert.assertEquals(身高、体重[2]);
}
}

枚举按声明存在性排序。因此,最简单的方法是按所需顺序声明它们


您还可以尝试使用Comparator接口实现compare方法。

我已更新了我的问题,并提供了更多详细信息。如果您想要特定于区域设置(不区分大小写)的顺序,而不是unicode代码点作为顺序,请使用java.text.Collator。如果您更改
则返回enum1.name().compareTo(enum2.name())返回enum1.toString().compareTo(enum2.toString())它可以工作!!
enum Stature {
    tall, average, small;

    public static Stature[] getSortedVaules() {
        Stature[] statures = values();
        Arrays.sort(statures, EnumByNameComparator.INSTANCE);
        return statures;
    }

    private static class EnumByNameComparator implements Comparator<Enum<?>> {

        public static final Comparator<Enum<?>> INSTANCE = new EnumByNameComparator();

        public int compare(Enum<?> enum1, Enum<?> enum2) {
            return enum1.name().compareTo(enum2.name());
        }

    }

}

public class StatureTest {

    @Test
    public void getSortedValues() {
        Stature[] normalValues = Stature.values();
        Assert.assertEquals(Stature.tall, normalValues[0]);
        Assert.assertEquals(Stature.average, normalValues[1]);
        Assert.assertEquals(Stature.small, normalValues[2]);

        Stature[] sortedVaules = Stature.getSortedVaules();
        Assert.assertEquals(Stature.average, sortedVaules[0]);
        Assert.assertEquals(Stature.small, sortedVaules[1]);
        Assert.assertEquals(Stature.tall, sortedVaules[2]);
    }
}