java8-Stream集合操作学习
一、Stream简介
1、Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。
2、stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。
3、只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。
二、Stream的优势
1、函数式编程带来的好处,我认为主要是在于使得代码逻辑更加清晰,可读性增强,便于维护,也更加不容易出错。
2、使用Stream对集合的一些操作,往往代码量只有传统的循环遍历的一半甚至更少。less code,less bug!
3、有逼格
三、示例数据源
public List<Map<String,Object>> list(){ Map<String,Object> map1=new HashMap<>(); map1.put("id","1"); map1.put("name","小张"); map1.put("age","10"); map1.put("sex","男"); Map<String,Object> map2=new HashMap<>(); map2.put("id","2"); map2.put("name","小李"); map2.put("age","15"); map2.put("sex","女"); Map<String,Object> map3=new HashMap<>(); map3.put("id","3"); map3.put("name","小王"); map3.put("age","30"); map3.put("sex","男"); List<Map<String,Object>> list=new ArrayList<>(); list= Arrays.asList(map1,map2,map3); return list;}
四、Fiter
fiter接受一个函数作为参数,该函数用lambda表达式表示。如性别为男,则会将所有性别为男的元素留下,余下的剔除。
List<Map<String,Object>> list =new test().getlist();System.out.println(list);List<Map<String,Object>> list2= list.stream().filter(stu-> stu.get("sex").equals("男")).collect(toList());System.out.println(list2);
控制台输出:
lanbda表达式中 ->右边返回boolean类型:true 则留下,false则剔除
public static void main(String[] args) {List<Map<String, Object>> list = new test().getlist();System.out.println(list);List<Map<String, Object>> list2 = list.stream().filter(stu -> {if (Integer.parseInt(stu.get("age").toString()) > 20) {return true;} else {return false;}}).collect(toList());System.out.println(list2);}
输出:
特别注意:这里fiter操作是创建了一个新的对象的,也就是说并不会改变原list,因此必须要接一下。
五、Map
Map是将list中的元素改变,比较常用,也很好用
public static void main(String[] args) {List<Map<String, Object>> list = new test().getlist();System.out.println(list);list.stream().map(stu->{stu.put("score",90);return stu;}).collect(toList());System.out.println(list1);}
输出:
注意一点Map方法,当返回的是原对象本身的时候,就不会创建新的List对象,也就是说原来的list会改变,正常用的时候也就不需要接了。
而如果返回的不是原对象的话,就会创建新list对象了,就需要接一下。这里也很好理解,如果这里不创建新对象的话,原来对象有泛型约束,就矛盾了啊。示例如下:
public static void main(String[] args) {List<Map<String, Object>> list = new test().getlist();System.out.println(list);List<String> list1= list.stream().map(stu->{return stu.get("name").toString();}).collect(toList());System.out.println(list1);}
输出:
六、FlatMap
flatMap返回参数为Stream,可以将list中的元素拆分为多个list。
public static void main(String[] args) {List<Map<String, Object>> list = new test().getlist();System.out.println(list);List<String> list1= list.stream().flatMap(person->{String[] names= person.get("name").toString().split("-");return Arrays.stream(names);}).collect(toList());System.out.println(list1);}
输出:
由图可见,将list中的对象进行处理后,将整合为新的list。
七、reduce
转载于:https://www.cnblogs.com/yinjing/p/11005823.html
java8-Stream集合操作学习相关推荐
- Java基础学习总结(132)——Java8 Stream流操作学习总结
传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...
- java jdk8 Stream流操作学习
Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作. 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作. Stream ...
- Java8 Stream流操作在用户系统中的妙用
在做目前这个项目的时候,发现以前有一个筛选的需求,老程序员是这么做的,先请求Http服务器得到一长串json数据,大概用A4纸打了40多页那么多,然后将这些对象写入到sqlite数据库中,再用数据库查 ...
- Java8 Stream reduce操作
Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...
- Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序
一个学生类的实体类 @Data public class Student {private Long id;private String name;private int age;private Do ...
- java8 stream流操作集合交集,差集,并集,过滤,分组,去重,排序,聚合等
测试对象 public class Person {private String name;private Integer age;private Integer weight;public Pers ...
- jdk1.8新特性 Lambda表达式和Stream集合操作(详细)
Lambda表达式 ① 语法 lambda表达式 ,是JDK1.8新增的特性 使用新的运算符 -> (转到.称为) lambda表达式的组成 第1部分: (参数) 第2部分: -> 第3部 ...
- 【Java】Java8特性官网学习之Stream的前世今生
前言 最近看了<数据密集型应用系统设计>,间断介绍了 命令式语言和声明式语言的区别 UNIX的 设计哲学 MapReduce编程框架 数据流引擎 函数运算符(函数式编程) 能发现Java8 ...
- java8 steam常用操作
java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...
- java8 Stream流【华为3面】
华为三面@java8 stream流操作面试题 前言:华为三面考了个很简单的基础编程,就是java8 Stream流操作,太久没写,也是没掌握好java基础直接搞得措手不及,stream两行代码的事情 ...
最新文章
- 超硬核全套Java视频教程(学习路线+免费视频+配套资料)
- Node核心模块Buffer
- 【c++】基本数据类型
- 没有人能阻止程序员将电脑上的一切搬到网页上
- pythonrequest函数_[Python]requests模块:HTTP请求时的回调函数
- Nginx作为web服务器的安装配置
- [HDU2294]Pendant
- 电脑一直显示服务器不兼容,原神PC版提示版本不兼容怎么办 PC版常见问题介绍...
- 商业创业融资计划书PPT模板
- 计算电磁学中的矩量法及其求解过程介绍
- 易语言怎么查看服务器文件,易语言文件传输查看进度
- linux路由表命令,在linux下永久保存路由表的写法(转)
- 如何使用Python抓取移动端APP的评论(小白篇)
- 微信公众号01: ase实现access_token的存储和被动刷新
- 数据类型之列表与元组
- 在编程中常见的一些英语词汇
- 请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTIT windows下设置mysql的sql_mode
- 【1+X】等价类划分法
- 第三届蓝桥桥杯预赛真题及详细答案
- 埃森哲互动成为全球最大的数字营销服务商