前言

随着java版本的不断更新迭代,java开发也可以变得甜甜的,最新版本都到java11了,但是后面版本也是不在提供商用支持,需要收费,但是java8 依然是持续免费更新使用的,后面版本也更新很快眼花缭乱,所以稳定使用还是用 java8 把既可以体验到新功能,又不需要,烦恼升级带来的bug

新特性

比较新的的特性就是流Stream ,和lambda表达式

图上面就是一些常用的方法,延迟方法,就是对数据作处理中间方法,终结方法就是最后符合好处理的数据结束方法

延迟方法和lambda表达式的延迟加载的原理一样,它可以进行链式编程如list.().filter().map().limit(),可以一直点下去最后一步由方法为count或者foreach加载数据

stream集合遍历forEach

遍历list直接list.stream().forEach进行遍历

        List<String> a=new ArrayList<>();
a.add("judy");
a.add("Tom");
//lambda表达式
a.stream().forEach(s -> System.out.println(s)); a.stream().forEach(s -> {
System.out.println(s);
System.out.println(2);
});

集合复杂对象遍历

        Student student = new Student();
student.setAddress("上海市黄浦区陆家浜路");
student.setName("judy");
student.setAge(26);
List<Student> students = new ArrayList<>();
students.add(student); //lambda表达式
students.stream().forEach(student1 -> System.out.println(student1.name)); students.stream().forEach(student1 -> {
System.out.println(student1.name);
System.out.println(student1.age);
System.out.println(student1.address);
});

stream条件过滤filter

使用list.stream().filter()进行过滤条件,为true 条件成立才会执行下面语句

        List<String> a = new ArrayList<>();
a.add("judy");
a.add("Tom");
a.add(" ");
//lambda表达式 是judy才打印
a.stream().filter(s -> s.equals("judy")).forEach(s -> System.out.println(s));
// 不是空才打印
a.stream().filter(s -> !s.isEmpty()).forEach(s -> System.out.println(s));

复杂对象多条件判断过滤

        Student student = new Student();
student.setAddress("上海市黄浦区陆家浜路");
student.setName("judy");
student.setAge(26);
List<Student> students = new ArrayList<>();
students.add(student); //lambda表达式 学生年纪大于28才打印
students.stream().filter(student1 -> student1.getAge()>28).forEach(student1 -> System.out.println(student1.name)); //多个条件过滤,同时成立 学生姓名是以张开头,并且长度等于3 ,lambda表达式 打印
students.stream().filter(s->s.getName().startsWith("张")).filter(s-> s.getName().length() == 3).forEach(System.out::println); students.stream().forEach(student1 -> {
System.out.println(student1.name);
System.out.println(student1.age);
System.out.println(student1.address);
});

stream元素映射map

stream流中的元素映射到另一个流中,这个是在后期经常用到的,比如方法所接收的返回值是A,但是接收的却是B

  1. 将String类型的流转换为Integer 类型
  Stream<String> stringStream = Stream.of("1", "2", "3", "4", "5", "6");
stringStream.map(str->Integer.parseInt(str)).forEach(System.out::println);
  1. 集合类型转换

    在做权限处理要求权限不能重复,所以list集合转换为set集合
      List<String> a = new ArrayList<>();
a.add("judy");
a.add("Tom");
a.add(" ");
a.stream().map(s -> s).collect(Collectors.toSet()).forEach(s -> System.out.printf(s));

方法需要返回的是List ,但是这里只有List,此时就要想到stream().map

    public  List<String> queryNamesByIds(List<Long> ids){
List<Category> categories = this.categoryMapper.selectByIdList(ids);
return categories.stream().map(category -> category.getName()).collect(Collectors.toList());
}

List<Object>转化为List<Cart>,其中List<Object>中的Object为Cart的json对象

        //查询购物车数据(将List<Object>变成List<Cart>)
return carts.stream().map(o -> JsonUtils.parse(o.toString(),Cart.class)).collect(Collectors.toList());

stream两个流合并成一个流contract

       Stream<String> streamA = Stream.of("张无忌","张翠山");
Stream<String> streamB = Stream.of("美羊羊","喜羊羊");
//写法1
//Stream.concat(streamA, streamB).forEach(System.out::println); //写法2
Stream<String> result= Stream.concat(streamA, streamB);
result.forEach(name-> System.out.println(name));

参考文章

Java8 新特性 Stream Api 之集合遍历的更多相关文章

  1. Java8 新特性 Stream() API

    新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...

  2. java8新特性——Stream API

    Java8中有两大最为重要得改变,其一时Lambda表达式,另外就是 Stream API了.在前面几篇中简单学习了Lambda表达式得语法,以及函数式接口.本文就来简单学习一下Stream API( ...

  3. Java8新特性 - Stream API

    Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合进行操作,就类似与使用SQL执行的数据库 ...

  4. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  5. JDK1.8新特性——Stream API

    JDK1.8新特性——Stream API 摘要:本文主要学习了JDK1.8的新特性中有关Stream API的使用. 部分内容来自以下博客: https://blog.csdn.net/icarus ...

  6. Java8 新特性 Stream 无状态中间操作

    无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

  7. Java8 新特性 Stream 非短路终端操作

    非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

  8. Java8 新特性 Stream 短路终端操作

    短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...

  9. Java8 新特性 Stream 练习实例

    练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...

随机推荐

  1. css 小细节

    1.div 设置background-image 图片,显示不全问题:background-size:100% 100%;

  2. 3、集成springfox-swagger 3.0.0 + 集成knife4j

    集成springfox-swagger 3.0.0 + 集成knife4j 1.基本用法 1.1.导入依赖 <!-- web接口 --> <dependency> <gr ...

  3. Python 删除满足条件的某些行

    数据: data 字段:col 要删除的内容是 col == False 的行 # 方案一 data1 = data[~data['col'] == False] # ~ 取反 # 方案二 保留 da ...

  4. 基于redis的分布式锁防止高并发重复请求

    需求: 我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统)(1)B业务系统调用A渠道系统,验证传入的手机.身份证.姓名三要素是否一致.(2)A渠道系统再调用外部厂商C系统.(3)A ...

  5. 全网唯一开源java开发的支持高扩展,高性能的Mqtt集群broker!

    SMQTT是一款开源的MQTT消息代理Broker, SMQTT基于Netty开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持 ...

  6. 从新建文件夹开始构建UtopiaEngine(2)

    本篇序言 摸了两个月的鱼,又一次拾起了自己引擎的框架,开始完善引擎系统,如果非要用现实中的什么东西比喻的话,那么我们目前实现的框架连个脚手架都不是.把这项目这样晾着显然不符合本人的风格,而且要作为毕业 ...

  7. 『动善时』JMeter基础 — 55、JMeter非GUI模式运行

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...

  8. python numpy 求数组的百位分数

    百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.运用在教育统计学中,例如表现测验成绩时,称PR值.分位数是以概率将一批数 ...

  9. 高性能内存图数据库RedisGraph(二)

    这篇文章主要介绍用一下RedisGraph的历史和现状. 2018年5月,Redis Labs发布了RedisGraph的预览/测试版.6个月后,在Redis Labs和开源社区的开发者们的共同努力下 ...

  10. DIV+css排版问题技巧总结---v客学院技术分享

                DIV+css排版问题技巧总结 一.排版思路 1.从上到下,从左到右,从大到小. 2.首先确定排版分区,排除色块分布,然后再从简单的部分开始. 3.在某一块内将HTML部分写好 ...