1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序

Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序

时间:2022-12-06 21:05:09

相关推荐

Java List集合排序 Java8 List集合排序方法 Java Lambda集合排序

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;@Beforepublic 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);}@Afterpublic void after(){System.out.println("执行完毕===");}}

三、List接口中sort方法排序

1、List.sort方法排序

/**@Description: List接口中sort方法排序* <br> 直接改变 原list集合顺序* @version v1.0* @author wu* @date /6/22 16:40*/@Testpublic void ListSortTest(){userList.sort((u1,u2)->u1.getAge()-u2.getAge());System.out.println("按照年龄排序ASC:"+userList);// 使用 Compator 方法userList.sort(paring(User::getId).reversed());System.out.println("使用 Compator 方法:"+userList);}

2、多条件排序

@Testpublic void ListSortTest2(){// 多条件排序: 年龄asc,id DESC// userList.sort(paring(User::getAge).thenComparing(User::getId).reversed());System.out.println("多条件排序: 年龄asc,id DESC:"+userList); // 不满足需求userList.sort(paring(User::getAge));userList.sort(paring(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 /6/22 16:56*/@Testpublic void ListStramSortTest(){// stream 方法排序, 需要返回新的 ListList<User> collect = userList.stream().sorted(paring(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 排序

@Testpublic void ListStramSortTest2(){// 并行的stream 排序List<User> collect = userList.parallelStream().sorted((u1, u2) -> {// 年龄 ASC , ID DESC 排序int age = u1.getAge() - u2.getAge();if(age == 0 ){// 年龄相等,则排序 idreturn 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 /6/22 17:11*/@Testpublic void CollectionsSortTest(){// 原始方法Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o2.getAge()-o1.getAge();}});System.out.println("Collections.sort 原始方法:"+userList);}

2、使用 lambda实现排序

@Testpublic void CollectionsSortTest2(){Collections.sort(userList,(u1,u2)->u2.getId()-u1.getId());System.out.println("Collections.sort lambda :" +userList);Collections.sort(userList,paring(User::getAge));System.out.println("Collections.sort lambda comparing :" +userList);}

六、总结

1、Java8中,排序的方式有:List 接口中的 sort 方法 、 Stream 接口中的 sorted 方法、Collections.sort 工具类方法 。

2、区别是:

List 接口中的 sort 方法 --- 操作原数据Stream 接口中的 sorted 方法 ---返回新ListCollections.sort 工具类方法 --- 操作原数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。