一、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集合操作学习相关推荐

  1. Java基础学习总结(132)——Java8 Stream流操作学习总结

    传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...

  2. java jdk8 Stream流操作学习

    Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作. 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作. Stream ...

  3. Java8 Stream流操作在用户系统中的妙用

    在做目前这个项目的时候,发现以前有一个筛选的需求,老程序员是这么做的,先请求Http服务器得到一长串json数据,大概用A4纸打了40多页那么多,然后将这些对象写入到sqlite数据库中,再用数据库查 ...

  4. Java8 Stream reduce操作

    Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...

  5. Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

    一个学生类的实体类 @Data public class Student {private Long id;private String name;private int age;private Do ...

  6. java8 stream流操作集合交集,差集,并集,过滤,分组,去重,排序,聚合等

    测试对象 public class Person {private String name;private Integer age;private Integer weight;public Pers ...

  7. jdk1.8新特性 Lambda表达式和Stream集合操作(详细)

    Lambda表达式 ① 语法 lambda表达式 ,是JDK1.8新增的特性 使用新的运算符 -> (转到.称为) lambda表达式的组成 第1部分: (参数) 第2部分: -> 第3部 ...

  8. 【Java】Java8特性官网学习之Stream的前世今生

    前言 最近看了<数据密集型应用系统设计>,间断介绍了 命令式语言和声明式语言的区别 UNIX的 设计哲学 MapReduce编程框架 数据流引擎 函数运算符(函数式编程) 能发现Java8 ...

  9. java8 steam常用操作

    java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...

  10. java8 Stream流【华为3面】

    华为三面@java8 stream流操作面试题 前言:华为三面考了个很简单的基础编程,就是java8 Stream流操作,太久没写,也是没掌握好java基础直接搞得措手不及,stream两行代码的事情 ...

最新文章

  1. 超硬核全套Java视频教程(学习路线+免费视频+配套资料)
  2. Node核心模块Buffer
  3. 【c++】基本数据类型
  4. 没有人能阻止程序员将电脑上的一切搬到网页上
  5. pythonrequest函数_[Python]requests模块:HTTP请求时的回调函数
  6. Nginx作为web服务器的安装配置
  7. [HDU2294]Pendant
  8. 电脑一直显示服务器不兼容,原神PC版提示版本不兼容怎么办 PC版常见问题介绍...
  9. 商业创业融资计划书PPT模板
  10. 计算电磁学中的矩量法及其求解过程介绍
  11. 易语言怎么查看服务器文件,易语言文件传输查看进度
  12. linux路由表命令,在linux下永久保存路由表的写法(转)
  13. 如何使用Python抓取移动端APP的评论(小白篇)
  14. 微信公众号01: ase实现access_token的存储和被动刷新
  15. 数据类型之列表与元组
  16. 在编程中常见的一些英语词汇
  17. 请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTIT windows下设置mysql的sql_mode
  18. 【1+X】等价类划分法
  19. 第三届蓝桥桥杯预赛真题及详细答案
  20. 埃森哲互动成为全球最大的数字营销服务商

热门文章

  1. echarts节点折叠实现
  2. 'break' not in the 'loop' or 'switch' context 报错
  3. unity3d 动态添加地面贴图 草地
  4. 企业微信认证申请流程
  5. 【POJ No. 3294】星际迷航 Life Forms
  6. ibm虚拟化 用的服务器品牌,浅析IBM i虚拟化技术
  7. GDB 的几个用法(until, finish, tui)
  8. MAXTENT模型地理维度不一致的解决办法
  9. List集合按数量分组
  10. ipad显示portal服务器获取不,苹果portal认证失败原因合集