import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Collections: https://developer.android.com/reference/java/util/Collections
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Entity> list = new ArrayList<>();
Entity entity;
entity = new Entity();
entity.setPrice(300);
entity.setTime(1000000003);
entity.setName("张三");
list.add(entity);
entity = new Entity();
entity.setPrice(100);
entity.setTime(1000000001);
entity.setName("李四");
list.add(entity);
entity = new Entity();
entity.setPrice(200);
entity.setTime(1000000002);
entity.setName("王五");
list.add(entity);
// 根据指定比较器引发的顺序对指定列表进行排序
Collections.sort(list, new SortComparator(SortComparator.SortEnum.DESC, SortComparator.SORT_TYPE_TIME));
for (int i = 0; i < list.size(); i++) {
Entity object = list.get(i);
System.out.println("排序后 - name:" + object.getName());
}
}
}
import android.text.TextUtils;
import java.util.Comparator;
/**
* 自定义一个排序比较器类
*/
public class SortComparator implements Comparator<Entity> {
// 排序
private SortEnum mSortEnum;
// 类型
private String mSortType;
// 排序类型:时间
public final static String SORT_TYPE_TIME = "time";
// 排序类型:价格
public final static String SORT_TYPE_PRICE = "price";
public enum SortEnum {
ASC,
DESC
}
/**
* 构造器
*
* @param sortEnum
* @param sortType
*/
public SortComparator(SortEnum sortEnum, String sortType) {
this.mSortEnum = sortEnum;
this.mSortType = sortType;
}
@Override
public int compare(Entity leftEntity, Entity rightEntity) {
if (!TextUtils.isEmpty(mSortType)) {
long left = 0;
long right = 0;
if (mSortType.equals(SORT_TYPE_TIME)) {
left = leftEntity.getTime();
right = rightEntity.getTime();
} else if (mSortType.equals(SORT_TYPE_PRICE)) {
left = leftEntity.getPrice();
right = rightEntity.getPrice();
}
return compare(mSortEnum, left, right);
}
return 0;
}
/**
* 排序比较
*
* @param sortEnum
* @param left
* @param right
* @return
*/
private int compare(SortEnum sortEnum, long left, long right) {
int compare = 0;
switch (sortEnum) {
case ASC:
// ASC是按升序排列,从小到大排序
if (left > right) {
compare = 1;
} else if (left < right) {
compare = -1;
} else {
compare = 0;
}
break;
case DESC:
// DESC则是按降序排列,从大到小排序
if (left > right) {
compare = -1;
} else if (left < right) {
compare = 1;
} else {
compare = 0;
}
break;
}
return compare;
}
}
public class Entity {
// 时间
private long time;
// 价格
private int price;
// 名称
private String name;
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return super.toString();
}
}