Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序
一、概述
Java中集合排序,在Java8之前,可以通过 Collections类的sort方法进行排序;Java8之后,新增 lambda和stream ,都增加了相关的排序方法,本文将整理下常见的三种排序方法。
分别是:
- List 接口中的 sort 方法
- Stream 接口中的 sorted 方法
- Collections.sort 工具类方法
二、准备工作
1、创建一个User类,相关属性如下:
public static class User{
int id ;
String name ;
int age ;
String addr ;
public User(int id, String name, int age, String addr) {
this.id = id;
this.name = name;
this.age = age;
this.addr = addr;
}
// ignore getter/setter/toString
}
2、单元测试类,准备工作
public class ListSortTest {
List<User> userList = null;
@Before
public void init(){
userList = Lists.newArrayList();
userList.add(new User(1,"小明",22,"北京"));
userList.add(new User(2,"小红",18,"上海"));
userList.add(new User(3,"小花",22,"广州"));
userList.add(new User(4,"小刚",33,"深圳"));
System.out.println("原始数据是:"+userList);
}
@After
public void after(){
System.out.println("执行完毕===");
}
}
三、List接口中sort方法排序
1、List.sort方法排序
/**@Description: List接口中sort方法排序
* <br> 直接改变 原list集合顺序
* @version v1.0
* @author wu
* @date 2022/6/22 16:40
*/
@Test
public void ListSortTest(){
userList.sort((u1,u2)->u1.getAge()-u2.getAge());
System.out.println("按照年龄排序ASC:"+userList);
// 使用 Compator 方法
userList.sort(Comparator.comparing(User::getId).reversed());
System.out.println("使用 Compator 方法:"+userList);
}
2、多条件排序
@Test
public void ListSortTest2(){
// 多条件排序: 年龄asc,id DESC
// userList.sort(Comparator.comparing(User::getAge).thenComparing(User::getId).reversed());
System.out.println("多条件排序: 年龄asc,id DESC:"+userList); // 不满足需求
userList.sort(Comparator.comparing(User::getAge));
userList.sort(Comparator.comparing(User::getId).reversed());
System.out.println("多条件排序2: 年龄asc,id DESC:"+userList);
}
四、Stream中的sort方法排序
1、使用Stream中的sort方法排序
/**@Description: 使用Stream中的sort方法排序
* <br> Stream 方法,不会改变原集合数据顺序,会生成新的List
* @version v1.0
* @author wu
* @date 2022/6/22 16:56
*/
@Test
public void ListStramSortTest(){
// stream 方法排序, 需要返回新的 List
List<User> collect = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
System.out.println("Stream id DESC : "+ collect);
List<User> collect1 = userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge()).collect(Collectors.toList());
System.out.println("Stream age DESC : "+ collect1);
}
2、并行的stream 排序
@Test
public void ListStramSortTest2(){
// 并行的stream 排序
List<User> collect = userList.parallelStream().sorted((u1, u2) -> {
// 年龄 ASC , ID DESC 排序
int age = u1.getAge() - u2.getAge();
if(age == 0 ){
// 年龄相等,则排序 id
return u2.getId()- u1.getId();
}
return age ;
}).collect(Collectors.toList());
System.out.println("parallelStream - 年龄 ASC , ID DESC 排序: " + collect);
}
五、Collections类的sort方法排序
1、java8前,匿名内部类方法
/**@Description: Collections 类的sort方法
* <br> 直接操作原List数据
* @version v1.0
* @author wu
* @date 2022/6/22 17:11
*/
@Test
public void CollectionsSortTest(){
// 原始方法
Collections.sort(userList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o2.getAge()-o1.getAge();
}
});
System.out.println("Collections.sort 原始方法:"+userList);
}
2、使用 lambda实现排序
@Test
public void CollectionsSortTest2(){
Collections.sort(userList,(u1,u2)->u2.getId()-u1.getId());
System.out.println("Collections.sort lambda :" +userList);
Collections.sort(userList,Comparator.comparing(User::getAge));
System.out.println("Collections.sort lambda comparing :" +userList);
}
六、总结
1、Java8中,排序的方式有:List 接口中的 sort 方法 、 Stream 接口中的 sorted 方法、Collections.sort 工具类方法 。
2、区别是:
- List 接口中的 sort 方法 --- 操作原数据
- Stream 接口中的 sorted 方法 --- 返回新List
- Collections.sort 工具类方法 --- 操作原数据
版权声明:程序员胖胖胖虎阿 发表于 2022年9月12日 上午12:16。
转载请注明:Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序 | 胖虎的工具箱-编程导航
转载请注明:Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序 | 胖虎的工具箱-编程导航
相关文章
暂无评论...