我正在开发一个适用于Web服务的Android应用程序。
我想按字母顺序排序Enum.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开发的新手。
您知道如何使用statureString
按字母顺序对其进行排序?
我想这样做,因为我想在Enum.values()
上使用这些ArrayAdapter
:
mSpinStature.setAdapter(new ArrayAdapter<Stature>(mActivity, android.R.layout.simple_dropdown_item_1line, Stature.values()));
我想在此处获取Stature
所选项目:
private OnItemSelectedListener listener = new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long aid)
{
if (parent.equals(mSpinStature))
{
Stature item = (Stature)parent.getAdapter().getItem(pos);
Log.v("TAG", item.toString() + item.getValue());
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0)
{
}
};
答案 0 :(得分:8)
如何在枚举
中添加方法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]);
}
}
答案 1 :(得分:1)
枚举按声明优先顺序排序。因此,最简单的方法是按所需顺序声明它们。
您也可以尝试使用Comparator接口实现比较方法。