java 集合自定义排序
代码
package per.jwy.test;
/**
* @author jwy
* @since 2019/5/27 10:32
*/
public class User{
private String name;
private Integer age;
private String sex;
public User() {
}
public User(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
package per.jwy.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author jwy
* @since 2019/5/27 10:34
*/
public class MainTest {
public static void main(String[] args){
test1();
}
public static void test1(){
User user1 = new User("maria",23,"2");
User user2 = new User("jane",24,"2");
User user3 = new User("kangkang",18,"1");
List<User> userList = new ArrayList<User>();
userList.add(user3);
userList.add(user1);
userList.add(user2);
System.out.println("排序前==================");
System.out.println(userList);
Collections.sort(userList, new Comparator<User>() {
public int compare(User o1, User o2) {
if("2".equals(o1.getSex())){
return -1;
}
return 1;
}
});
System.out.println("排序后==================");
System.out.println(userList);
}
}
输出结果
排序前==================
[User{name=‘kangkang’, age=18, sex=‘1’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}]
排序后==================
[User{name=‘jane’, age=24, sex=‘2’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘kangkang’, age=18, sex=‘1’}]
排序前:sex:1,2,2
排序后:sex:2,2,1
分析:
排序前根据集合的添加顺序,排序后
将sex=="2"的往前排
主要代码:
Collections.sort(userList, new Comparator<User>() {
/**
* 返回值分为三种:1(或大于0),0,-1(或小于0)
* 当返回1时,集合顺序插入,先插入o2,当返回0时集合顺序(或随机??)插入,先插入o2
* 当返回-1时,集合倒叙插入,先插入o1
* 此例目的:将sex等于2的先返回
* 两种实现方式:
* 1.当"2".equals(o1.getSex())时,说明要返回o1,即先插入o1,倒叙插入应返回-1;
*/
public int compare(User o1, User o2) {
if("2".equals(o1.getSex())){
return -1;
}
return 1;
}
//2.当"2".equals(o2.getSex())时,说明要返回o2,即先插入o2,正叙插入应返回1;
/*public int compare(User o1, User o2) {
if("2".equals(o2.getSex())){
return 1;
}
return -1;
}*/
});
第二种
package per.jwy.test;
/**
* @author jwy
* @since 2019/5/27 10:32
*/
public class User implements Comparable{
private String name;
private Integer age;
private String sex;
public User() {
}
public User(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
public int compareTo(Object o) {
User user = (User)o;
if("2".equals(user.sex)){
return 1;
}
return -1;
}
}
package per.jwy.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author jwy
* @since 2019/5/27 10:34
*/
public class MainTest {
public static void main(String[] args){
test1();
}
public static void test1(){
User user1 = new User("maria",23,"2");
User user2 = new User("jane",24,"2");
User user3 = new User("kangkang",18,"1");
List<User> userList = new ArrayList<User>();
userList.add(user3);
userList.add(user1);
userList.add(user2);
System.out.println("排序前==================");
System.out.println(userList);
Collections.sort(userList);
System.out.println("排序后==================");
System.out.println(userList);
}
}
输出结果:
排序前==================
[User{name=‘kangkang’, age=18, sex=‘1’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}]
排序后==================
[User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}, User{name=‘kangkang’, age=18, sex=‘1’}]
主要代码:
public int compareTo(Object o) {
User user = (User)o;
/**
* 目的:将sex=2的user首先返回,
* 实现1:如果返回1,则顺序插入,即先插入o,
* 则另"2".equals(user.sex),先插入user,则返回1
*/
if("2".equals(user.sex)){
return 1;
}
return -1;
/**
* 实现2:如果返回1,则顺序插入,即先插入o,
* 则另"2".equals(this.sex),先插入this,则返回-1
*/
/*if("2".equals(this.sex)){
return -1;
}
return 1;*/
}