import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.junit.Test; public class StackDome { @Test public void sortTest() { /** * 单条件排序 */ List<User> users = new CopyOnWriteArrayList<User>(); int count = 0; final int IDS = 10000; do { // 随机生产1到100范围的随机数 int random = (int) (1 + Math.random() * (100 - 1 + 1)); int randomId = (int) (1 + Math.random() * (11 - 1 + 1)); users.add(new User(String.valueOf("sound" + count), random, IDS + randomId)); count++; } while (count < 10); // 排序前,单独获取年龄 // Set<Integer> userAges = // users.stream().map(User::getUserAge).collect(Collectors.toSet()); // userAges.forEach(s->{System.out.println(s);}); users.forEach(s -> { System.out.println("排序前====》名字" + s.getUserName() + ",年龄:" + s.getUserAge()+","+s.getId()); }); // 按照年龄进行排序。从小到大{升序} Collections.sort(users, new Comparator<User>() { @Override public int compare(User o1, User o2) { int compare = Integer.compare(o1.getUserAge(), o2.getUserAge()); return compare; } }); // 排序后 users.forEach(s -> { System.err.println("排序后====》名字" + s.getUserName() + ",年龄:" + s.getUserAge()+","+s.getId()); }); // //补充: /** * 多条件排序是根据优先级去判断,如果年龄相等,则再根据ID去比较 这里用年龄作为优先级, */ Collections.sort(users, new Comparator<User>() { @Override public int compare(User o1, User o2) { int compare = Integer.compare(o1.getUserAge(), o2.getUserAge()); if (compare == 0) { compare = Integer.compare(o1.getId(), o2.getId()); } return compare; } }); users.forEach(s -> { System.out.println("双条件排序====》名字" + s.getUserName() + ",年龄:" + s.getUserAge()+","+s.getId()); }); } } class User { private int userAge; private String userName; private int id; public User(String userName, int userAge, int id) { this.userName = userName; this.userAge = userAge; this.id = id; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getId() { return id; } public void setId(int id) { this.id = id; } } 运行效果: 排序前====》名字sound0,年龄:96,10003 排序前====》名字sound1,年龄:58,10001 排序前====》名字sound2,年龄:59,10007 排序前====》名字sound3,年龄:46,10004 排序前====》名字sound4,年龄:6,10011 排序前====》名字sound5,年龄:61,10004 排序前====》名字sound6,年龄:24,10001 排序前====》名字sound7,年龄:24,10007 排序前====》名字sound8,年龄:10,10006 排序前====》名字sound9,年龄:47,10008 排序后====》名字sound4,年龄:6,10011 排序后====》名字sound8,年龄:10,10006 排序后====》名字sound6,年龄:24,10001 排序后====》名字sound7,年龄:24,10007 排序后====》名字sound3,年龄:46,10004 排序后====》名字sound9,年龄:47,10008 排序后====》名字sound1,年龄:58,10001 排序后====》名字sound2,年龄:59,10007 排序后====》名字sound5,年龄:61,10004 排序后====》名字sound0,年龄:96,10003 双条件排序====》名字sound4,年龄:6,10011 双条件排序====》名字sound8,年龄:10,10006 双条件排序====》名字sound6,年龄:24,10001 双条件排序====》名字sound7,年龄:24,10007 双条件排序====》名字sound3,年龄:46,10004 双条件排序====》名字sound9,年龄:47,10008 双条件排序====》名字sound1,年龄:58,10001 双条件排序====》名字sound2,年龄:59,10007 双条件排序====》名字sound5,年龄:61,10004 双条件排序====》名字sound0,年龄:96,10003