Java8集合List排序、筛选、求和、求最大值、平均值、List转Map
Java8集合List排序、筛选
1. List
元素有序
元素可重复
1.1 ArrayList
动态数组实现
查询快
增删慢(末尾处也快)
1.2 LinkedList
链表实现
查询慢
增删快
1.3 ArrayList和LinkedList比较
实现 | 查询 | 增删 | 线程安全? | |
---|---|---|---|---|
ArrayList | 动态数组 | 快 | 慢(末尾处也快) | 不安全 |
LinkedList | 链表 | 慢 | 快 | 不安全 |
ArrayList:
它的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍。
LinkedList:
底层实现是双向链表。
在增加和删除元素时效率较高。
1.4 List过滤指定元素
1.4.1 准备待测试的List
public class Message {private Long id; //idprivate String msg; //消息private Date sendTime; //时间戳//省略get set
}
//返回一个List
private 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遍历List
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去重
//使用collect(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));}
}
Java8集合List排序、筛选、求和、求最大值、平均值、List转Map相关推荐
- Golang——切片使用大全(创建、初始化、遍历、截取、修改、添加、切片的copy、切片作为函数参数、切片求和、切片求最大值)
概念: 切片出现的原因也是因为数组的可操作性不高.切片的长度是不固定的,可以追加数据,可以理解切片是一个动态数组,切片的底层是一个结构体 切片类型(slice)本身并不是动态数组或数组指针.它内部通过 ...
- (1~2):C实现数组求和,求平均值,求最大值,最小值
1.求和.求平均值 #include<stdio.h>int main() {int arr[5]={1,2,3,4,5};int sum=0;for(int i=0;i<5;i++ ...
- 数组求和,求平均数,求最大值和最小值
1.定义数组 var arr=[]; var arr=new Array(); 2.数组赋值 var arr=[]; arr[0]=10;//把数字10赋值到数组索引为0的位置上 arr[1]=20; ...
- python 二维列表按列求和,按列求最大值,转置,* 星号操作,简便方法,不使用numpy
python3中,二维列表(矩阵)按列求和.求最大值.二维列表转置的一些操作,不使用numpy库.在LeetCode做题时比较常用. 太长不看版本 # 用于演示的二维列表 >>>a ...
- Eratosthenes集合筛选法求素数
Eratosthenes集合筛选法求素数 算法思想 和数因子,和数因子是从素数中产生的,最小的素数为2,m作为合数因子,从2开始,配合k+=m,删除合数因子的倍数,当m不断扩大时,如当m为5的时候,上 ...
- python使用集合实现筛选法求素数-python素数筛选法浅析
原理: 素数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数.在加密应用中起重要的位置,比如广为人知的RSA算法中,就是基于大整数的因式分解难题,寻找两个超大的素数然后相乘作 ...
- Java8 Stream 分页-多字段排序-筛选
分页 list.stream().skip((page-1)*limit).limit(limit).collect(Collectors.toList()) 筛选 Set<String> ...
- Java8 Stream-深入理解筛选、归约、分组、聚合
文章目录 1. 什么是stream? 2. 如何创建stream? 2.1 空的流 2.2 集合的流 2.3 数组的流 2.4 Stream.builder() 2.5 Stream.generate ...
- java8 集合结合steam操作实例
java8 集合结合steam操作实例 集合框架介绍:https://www.runoob.com/java/java-collections.html java8-streams:https://w ...
最新文章
- 天昊Accu16S细菌绝对定量测序项目登陆顶级环境杂志《Journal of Hazardous Materials》...
- 一线上nagios监控参数
- 第三次学JAVA再学不好就吃翔(part32)--方法重写
- 运动基元_发现大量Java基元集合处理
- [android] AndroidManifest.xml - 【 manifest - permission】
- 高性能HTTP加速器Varnish(管理维护篇)
- 计算机学情分析,中职学生的学情分析 《计算机专业》.doc
- 一个双线程下同一时候操作指针变量导致野指针出现的问题总结
- 提前防止Non-PIE错误,检测app是否包含PIE标志
- 程序员必读的三十本经典书籍
- Mac:彻底卸载MySQL
- 熄风的止颤的汤治疗帕金森的优势
- 为什么使用multiarmed bandit algorithms(多臂赌博机算法)--与A/Btest的对比
- IOS-升级102 全局监听SendEvent
- 微信闪退的修复方法分享
- 财报解读:硬件支撑思科增长,云平台何时能突围?
- 【加密技术】Java加密算法
- 酷我音乐歌手写真接口分享
- 数字同步网络时钟系统设计方案
- Python——pandas模块—Series数据结构