Oreo
Oreo

Reputation: 2594

Sort an ArrayList based on Integer

When i am fetching data into ListView, getting data in a same sequence, but what if i want to sort data based on MemberID, But i want to show recent on top

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);

    }

    ........
}

Upvotes: 2

Views: 2912

Answers (3)

everyman
everyman

Reputation: 3407

This should work:

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

Note: You should name the class Members in singular, since it is a representation of one Member.

EDIT: Sort order depends on how you set http://developer.android.com/reference/android/widget/AbsListView.html#setStackFromBottom(boolean)

When stack from bottom is set to true, the list fills its content starting from the bottom of the view.

Upvotes: 1

PythaLye
PythaLye

Reputation: 314

You might use lambda expression if you are developing in Java 8:

Collections.sort(membersArrayList, 
     (m1, m2) -> (int) (m2.getMemberID() - m1.getMemberID()));

Upvotes: 1

codeaholicguy
codeaholicguy

Reputation: 1691

Use Collections.sort() for sort ArrayList, there is sample:

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;
        }
    }
});

Upvotes: 2

Related Questions