
当前位置:首页 > 图灵资讯 > 技术篇> Java8集合List排序、筛选、求和、求最大值、平均值、List转Map
Java8集合List排序、筛选、求和、求最大值、平均值、List转Map
发布时间:2023-07-05 17:36:18
Java8集List排序,筛选
1. List
元素有序
元素可重复
1.1 ArrayList
实现动态数组
查询快
增删慢(末尾也快)
1.2 LinkedList
链表实现
查询慢
增删快
1.3 与LinkedList相比,ArrayList和LinkedList
实现
查询
增删
线程安全?
ArrayList
动态数组
快
慢(末端也快)
不安全
LinkedList
链表
慢
快
不安全
ArrayList:
默认初始化容量为10,每次扩容时增加原始容量的一半,即变为原始容量的1.5倍。
LinkedList:
底层实现是双向链表。
在增加和删除元素时效率更高。
1.4 List过滤指定元素
1.4.1 Listt准备测试
public class Message { private Long id; //id private String msg; //消息 private Date sendTime; //时间戳 //省略get set}
//返回Listprivate static List<Message> getMessageList(){ List<Message> list = new ArrayList<>(); list.add(new Message(1L, "a", new Date())); list.add(new Message(2L, "b", new Date())); list.add(new Message(4L, "b", new Date())); list.add(new Message(3L, "c", new Date())); return list; }
1.4.2 使用iterator来体验Listttor
private static void TestArrayList(){ List<Message> list = getMessageList(); System.out.print(“删除前:”); list.stream().forEach(item -> System.out.print(item)); Iterator<Message> it = list.iterator(); while (it.hasNext()) { Message s = it.next(); if (s.getMsg().equals("b")) { it.remove(); } } System.out.print(\n删除后:; list.stream().forEach(item -> System.out.print(item));}
1.4.2 使用Java8对List过滤器进行筛选
private static void filterList(){ List<Message> list1 = getMessageList(); ///过滤所有msg都是b记录 List<Message> list2 = list1.stream().filter(s -> !s.getMsg().equals("b")).collect(Collectors.toList()); list2.stream().forEach(item -> System.out.println(item));}
1.4.3 使用toset去重
///使用distinct重量 List<String> distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());distinctMsg.forEach(System.out::println);
1.4.3 使用distinct去重量
使用collecct//(toSet()去重Set<String> distinctmsg2 = list.stream().map(Message::getMsg).collect(toSet());distinctmsg2.forEach(System.out::println);
1.5 使用Java8对List排序
private static void sortList(){ List<Message> list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println(==========); list.stream().forEach(item -> System.out.println(item)); ////按ID排序 list.sort((a, b) -> a.getId().compareTo(b.getId())); ///按ID升序排序(简写) list.sort(Comparator.comparing(Message::getId)); //按Id降序排序(简写) list.sort(Comparator.comparing(Message::getId).reversed()); System.out.println(===排序后如下===); list.stream().forEach(item -> System.out.println(item)); } }
1.5.2 多个字段的组合排序
private static void sortList(){ List<Message> list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println(==========); list.stream().forEach(item -> System.out.println(item)); //按多条件组合排序,先按msg(升序)排序,然后根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId)); //按多条件组合排序,先按msg(升序)排序,然后根据id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed())); //按多条件组合排序,先按msg(降序),再按id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed()); //按多条件组合排序,先按msg(降序)排序,然后根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).reversed().thenComparing(Message::getId)); System.out.println(===排序后如下===); list.stream().forEach(item -> System.out.println(item)); }}

上一篇 金九银十跳槽涨薪Java面试题!568页真题+答案解析,大厂都在考
下一篇 【HMS Core】接入华为帐号,获取访问令牌失败,提示错误码20022
标签:
下一篇 【HMS Core】接入华为帐号,获取访问令牌失败,提示错误码20022
文章素材均来源于网络,如有侵权,请联系管理员删除。