前言

随着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. 易车网实战+【保姆级】:Feapder爬虫框架入门教程

    今天辰哥带大家来看看一个爬虫框架:Feapder,看完本文之后,别再说你不会Feapder了.本文辰哥将带你了解什么是Feapder?.如何去创建一个Feapder入门项目(实战:采集易车网轿车数据) ...

  2. 2、配置tomcat-service服务

    1.将Tomcat设置成服务 (假设我们缺省的Tomcat目录为d:\Tomcat_oa) : 2.同时按住"win+r"键调出"运行",在方框内输入" ...

  3. SpringBoot Redis 2.0.x

    redis的安装 在笔者之前的文章中有介绍redis的安装,不会的可以去看 笔者之前写的文章redis安装 完成安装后如果不熟悉redis的操作,redis官方文档也有基本操作指南,redis基本操作 ...

  4. [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver

    [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver ...

  5. awk中printf的用法

    printf函数   打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返 ...

  6. 我是如何用redis做实时订阅推送的(转)

    前阵子开发了公司领劵中心的项目,这个项目是以redis作为关键技术落地的.       先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了...   其中 ...

  7. linux学习之路第九天(任务调度)

    crond 任务调度 概念 任务调度:是指的系统在某个时间执行的特定命令或程序. 比喻理解: 可以这样理解,比如生活中有闹钟,闹钟的作用是不是叫人起床的,那古时候没有闹钟,叫人起床的工作是不是要人去完 ...

  8. postgresql 使用游标笔记

    游标介绍:游标是一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发送给服务端的sql语句,或是批处理.存储过程.触发器中的数据处理请求. 游标的优点在于它允许应用程序对查询语 ...

  9. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

    大家好,我是飘渺. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...

  10. DNS部署与安全

    1.DNS Domain Name Service 域名服务 作用: 为客户机提供域名解析服务器 2.域名组成 2.1 域名组成概述 如"www.baidu.com"是一个域名,从 ...