Java8 新特性 Stream Api 之集合遍历
前言
随着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
- 将String类型的流转换为Integer 类型
Stream<String> stringStream = Stream.of("1", "2", "3", "4", "5", "6");
stringStream.map(str->Integer.parseInt(str)).forEach(System.out::println);
- 集合类型转换
在做权限处理要求权限不能重复,所以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 之集合遍历的更多相关文章
- Java8 新特性 Stream() API
新特性里面为什么要加入流Steam() 集合是Java中使用最多的API,几乎每一个Java程序都会制造和处理集合.集合对于很多程序都是必须的,但是如果一个集合进行,分组,排序,筛选,过滤...这些操 ...
- java8新特性——Stream API
Java8中有两大最为重要得改变,其一时Lambda表达式,另外就是 Stream API了.在前面几篇中简单学习了Lambda表达式得语法,以及函数式接口.本文就来简单学习一下Stream API( ...
- Java8新特性 - Stream API
Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合进行操作,就类似与使用SQL执行的数据库 ...
- java8新特性:对map集合排序
一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...
- JDK1.8新特性——Stream API
JDK1.8新特性——Stream API 摘要:本文主要学习了JDK1.8的新特性中有关Stream API的使用. 部分内容来自以下博客: https://blog.csdn.net/icarus ...
- Java8 新特性 Stream 无状态中间操作
无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...
- Java8 新特性 Stream 非短路终端操作
非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- Java8 新特性 Stream 练习实例
练习实例 配合Java8 新特性 Steam() API 使用 //没有写get set 构造方法 public class Sku { private Integer skuId; private ...
随机推荐
- 易车网实战+【保姆级】:Feapder爬虫框架入门教程
今天辰哥带大家来看看一个爬虫框架:Feapder,看完本文之后,别再说你不会Feapder了.本文辰哥将带你了解什么是Feapder?.如何去创建一个Feapder入门项目(实战:采集易车网轿车数据) ...
- 2、配置tomcat-service服务
1.将Tomcat设置成服务 (假设我们缺省的Tomcat目录为d:\Tomcat_oa) : 2.同时按住"win+r"键调出"运行",在方框内输入" ...
- SpringBoot Redis 2.0.x
redis的安装 在笔者之前的文章中有介绍redis的安装,不会的可以去看 笔者之前写的文章redis安装 完成安装后如果不熟悉redis的操作,redis官方文档也有基本操作指南,redis基本操作 ...
- [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver
[源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (13) --- 弹性训练之 Driver ...
- awk中printf的用法
printf函数 打印输出时,可能需要指定字段间的空格数,从而把列排整齐.在print函数中使用制表符并不能保证得到想要的输出,因此,可以用printf函数来格式化特别的输出. printf函数返 ...
- 我是如何用redis做实时订阅推送的(转)
前阵子开发了公司领劵中心的项目,这个项目是以redis作为关键技术落地的. 先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了... 其中 ...
- linux学习之路第九天(任务调度)
crond 任务调度 概念 任务调度:是指的系统在某个时间执行的特定命令或程序. 比喻理解: 可以这样理解,比如生活中有闹钟,闹钟的作用是不是叫人起床的,那古时候没有闹钟,叫人起床的工作是不是要人去完 ...
- postgresql 使用游标笔记
游标介绍:游标是一种从表中检索数据并进行操作的灵活手段,游标主要用在服务器上,处理由客户端发送给服务端的sql语句,或是批处理.存储过程.触发器中的数据处理请求. 游标的优点在于它允许应用程序对查询语 ...
- SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!
大家好,我是飘渺. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...
- DNS部署与安全
1.DNS Domain Name Service 域名服务 作用: 为客户机提供域名解析服务器 2.域名组成 2.1 域名组成概述 如"www.baidu.com"是一个域名,从 ...