基于整数对ArrayList进行排序

3

当我将数据提取到ListView中时,数据以相同的顺序获取,但如果我想根据MemberID对数据进行排序,我希望最近的数据显示在顶部

public class AppointmentsActivity extends Activity {

    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ....
        adapter = new MembersAdapter (MembersActivity.this, R.layout.adapter_members, membersArrayList);

        listView.setAdapter(adapter);

    }

    ........
}

1
请点击以下链接,我认为你可以通过成员ID完成此操作:http://stackoverflow.com/questions/15149994/android-how-to-sort-data-for-listview - Paul
1
我认为你可以在这里找到答案:https://dev59.com/SmMl5IYBdhLWcg3wZGPo - BNK
可能是Java Comparator类用于对数组进行排序的重复问题。 - user902383
3个回答

2

使用Collections.sort()方法对ArrayList进行排序,以下是一个示例:

Collections.sort(membersArrayList, new Comparator<Member>(){
    public int compare(Member m1, Member m2) {
        if (m1.getMemberID() == m2.getMemberID()) {
            return 0;
        } else if (m1.getMemberID() > m2.getMemberID()) {
            return 1;
        } else {
            return -1;
        }
    }
});

1
这应该可以工作:

Collections.sort(membersArrayList, new Comparator<Member>(){
    public int compare(Member m1, Member m2) {
        return m1.getMemberID() - m2.getMemberID(); // sort order
    }
});

注意:应该将类名命名为单数形式的Member,因为它代表一个Member
编辑:排序顺序取决于您如何设置http://developer.android.com/reference/android/widget/AbsListView.html#setStackFromBottom(boolean)

当从底部堆叠设置为true时,列表将从视图底部开始填充其内容。


排序需要按降序进行,所以可以将 m2.. - m1 放置。 - anish
@anish 是的,这取决于如何设置http://developer.android.com/reference/android/widget/AbsListView.html#setStackFromBottom(boolean)。 - everyman

1
如果你在开发Java 8,可能会使用lambda表达式:
Collections.sort(membersArrayList, 
     (m1, m2) -> (int) (m2.getMemberID() - m1.getMemberID()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接