Stream流的学习
1.1、体验Stream流
package com.itheima01;import java.util.ArrayList;public class StreamDemo {public static void main(String[] args) {
// 创建一个集合,存储姓名ArrayList<String> array=new ArrayList<>();array.add("张伯伦");array.add("梁朝伟");array.add("张继科");array.add("张浩");array.add("田云");array.add("老铁");array.add("老王");array.stream().filter(s->s.startsWith("张")).filter(s->s.length()>=3).forEach(s-> System.out.println("姓张的三个字的名字有:"+s));}}
1.2、Stream流的生成方式
Collection体系的集合可以使用默认方法stream()生成流
default Stream<E>stream()
Map体系的集合间接的生成流
数组可以通过Stream接口的静态方法of(T...values)生成流
package com.itheima02;
/*
Collection体系的集合可以使用默认方法stream()生成流default Stream<E>stream()
Map体系的集合间接的生成流
数组可以通过Stream接口的静态方法of(T...values)生成流
*/import java.util.*;
import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {
// Collection体系的集合可以使用默认方法stream()生成流
// default Stream<E>stream()List<String> list = new ArrayList<>();Stream<String> ListStream = list.stream();Set<String> set = new HashSet<>();Stream<String> setStream = set.stream();
// Map体系的集合间接的生成流Map<String, Integer> map = new HashMap<String, Integer>();Set<String> keyset = map.keySet();Stream<String> keysetStream = keyset.stream();
// Integer value = map.get(keyset);Collection<Integer> v = map.values();Stream<Integer> iStream = v.stream();Stream<String> keyStream = map.keySet().stream();Stream<Integer> vStream = map.values().stream();Set<Map.Entry<String, Integer>> entry = map.entrySet();Stream<Map.Entry<String, Integer>> entryStream = entry.stream();
// 数组可以通过Stream接口的静态方法of(T...values)生成流String[] strArray = {"hello", "world", "java"};Stream<String> strArrayStream=Stream.of(strArray);Stream<String> sStream=Stream.of("hello","world","java");}
}
Stream常见的方法:
limit()返回指定长度的流的元素
skip()
package com.itheima01;import java.util.ArrayList;public class StreamDemo {public static void main(String[] args) {
// 创建一个集合,存储姓名ArrayList<String> array=new ArrayList<>();array.add("张伯伦");array.add("梁朝伟");array.add("张继科");array.add("张浩");array.add("田云");array.add("老铁");array.add("老王");
// array.stream().filter(s->s.startsWith("张")).filter(s->s.length()>=3).forEach(s-> System.out.println("姓张的三个字的名字有:"+s));
// Stream<T> limit(long maxSize)返回此流中的元素组成的流,截取指定的参数个数的数据array.stream().limit(2).forEach(System.out::println);
// Stream<T> skip(long n)跳过指定参数个数的数据,返回由该流的剩余元素组成的System.out.println("-------跳过指定参数个数的数据,返回由该流的剩余元素组成的-----");array.stream().skip(3).forEach(System.out::println);}}
1.3、Stream常见的中间操作方法
Stream<T> filter(Predicate predicate) 用于对流中的数据进行过滤
Predicate接口的中方法 boolean test(T t)对给定的参数进行判断,返回一个布尔值
Stream<T> limit(long maxSize) 返回此流中的元素组成的流,截取前指定参数个数的数据
Stream<T> skip(long n) 跳过指定参数个数的数据,返回由该流的剩余元素组成的流
static<T>Stream<T> concat(Stream a,Stream b)合并a和b两个流为一个流
Stream<T> distinct() 返回由该流的不同元素(根据Object.equals(Object))组成的流
Stream<T> sorted() 返回由此流的元素组成的流,根据自然顺序排序
Stream<T> sorted(Comparator Comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序
package com.itheima03;import java.util.ArrayList;
import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("科比");list.add("詹姆斯");list.add("杜兰特");list.add("欧文");list.add("哈登");list.add("乔治");list.add("小卡");list.add("库里");list.add("戴维斯");
// 使用filter()过滤
list.stream().filter(s->s.startsWith("小")).forEach(s->System.out.println(s));
// 需求1:截取4个数据组成一个流Stream<String> s1=list.stream().limit(4);
// 需求2:跳过2个数据组成一个流Stream<String> s2=list.stream().skip(2);System.out.println("————————————合并两个流——————————————————————");
// 需求3:合并需求1和需求2得到的流,并把结果在控制台输出
// Stream.concat(s1,s2).forEach(System.out::println);
// 需求4:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复
Stream.concat(s1,s2).distinct().forEach(System.out::println);}
}
package com.itheima03;import java.util.ArrayList;
//Stream<T> sorted() 返回由此流的元素组成的流,根据自然顺序排序
//Stream<T> sorted(Comparator Comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序
public class StreamDemo02 {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("kobe");list.add("jans");list.add("rose");list.add("harden");list.add("ads");list.add("kill");list.add("cuer");
// 需求1:按照字母顺序把数据在控制台输出
// list.stream().sorted().forEach(s->System.out.println(s));
// list.stream().sorted().forEach(System.out::println);
//需求2:按照字符串长度把数据在控制台输出
// 字符串短的排前面 list.stream().sorted((s1,s2)->-s1.length()-s2.length()).forEach(System.out::println);list.stream().sorted((s1,s2) ->{int num=s1.length()-s2.length();int num2=num==0?s1.compareTo(s2):num;return num2;}).forEach(System.out::println);}
}
<R>Stream<R> map(Function mapper) 返回由给定函数应用于此流的元素的结果组成的流
Function接口中的方法 R apply(T t)
IntStream map ToInt(ToIntFunction tion mapper) 返回一个IntStream其中包含将给定函数应用于此流的元素结果
IntStream表示原始int流
ToIntFunction 接口中的方法 int applyAsInt(T value)
1.4、Stream流的常见终结操作
void forEach(Consumer action) 对此流的每个元素执行操作
Consumer接口的方法 void acceopt(T t)对给定的参数执行此操作
long count()返回此流中的元素数
package com.itheima03;import java.util.ArrayList;public class StreamDemo04 {public static void main(String[] args) {
// 创建一个集合,存储姓名ArrayList<String> array=new ArrayList<>();array.add("张伯伦");array.add("梁朝伟");array.add("张继科");array.add("张浩");array.add("田云");array.add("老铁");array.add("老王");
//需求1:把集合中元素在控制台输出long countZhangName = array.stream().filter(s -> s.startsWith("张")).count();System.out.println(countZhangName);}}
Stream流的学习相关推荐
- Stream 流 【学习笔记】Java 基础
若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 写这篇博客旨在制作笔记,方便个人在线阅览,巩固知识,无其他用途. 学习视频 [黑马 Java 基础教程] ...
- java jdk8 Stream流操作学习
Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作. 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作. Stream ...
- Java基础学习总结(132)——Java8 Stream流操作学习总结
传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...
- Java - Stream流详解
文章目录 前言 大家好,好久不见了,最近由于实训的影响导致拖更了,在更新这一次估计javaSE基本上就算是完结了,还有一些落下的后面也会补上的,下次见面就是数据结构了 尽情期待吧!那么就让我们步入St ...
- Java学习day08--方法引用和Stream流
Java学习day08--方法引用和Stream流 方法引用和Stream流 方法引用 获取Collection.Map.数组流 Stream流的常用操作方法 方法引用和Stream流 1).流思想: ...
- Java函数式编程学习——Stream流
目录 概述 案例数据准备 1. 常用操作 2. 中间操作 filter map distinct sorted limit skip flatMap 3. 终结操作 foreach count max ...
- Stream流学习记录
1. 创建流 单列集合: 集合对象.stream() List<Author> authors =new ArrayList<>();Stream<Author> ...
- 【Java】函数式编程学习笔记——Stream流
学习视频:https://www.bilibili.com/video/BV1Gh41187uR?p=1 (1)[Java]函数式编程学习笔记--Lambda表达式 (2)[Java]函数式编程学习笔 ...
- 学习Java8 Stream流,让我们更加便捷的操纵集合
1. 概述 本篇文章会简略的介绍一下 Lambda 表达式,然后开启我们的正题 Java8 Stream 流,希望观众老爷们多多支持,并在评论区批评指正! Java8 的 Stream 流使用的是函数 ...
最新文章
- DNN 数据访问策略 (转)
- ie下提示SCRIPT1028:缺少标识符、字符串或数字
- flutter刷新页面_Flutter BottomNavigationBar切换会刷新当前页面解决方
- 《江湖X:汉家江湖》游戏论剑系统技术全解析
- Zookeeper系列四:Zookeeper实现分布式锁、Zookeeper实现配置中心
- Master HA源码解析
- 导出表结构_十分钟教你轻松掌握移动PE导出表,快来学习!
- Git+GitHub+SaltStack
- 全世界都误会我们了。。。。。。。。
- jquery ajax 方法及各参数详解
- 《特征值与特征向量》定义、意义及例子
- win102004优化_如何对Win10 2004进行优化设置?Win10优化技巧
- (HTTP 503) (Request-ID: req-4f56de6f-d29c-4c44-aed3-e6ef8253384a)
- 梯度下降及具体计算方式
- 远程工作:从300到300万,一个远程外包团队的发展历程和经验【转载】
- 几种数字传感器介绍(一)————温湿度传感器(HDC1080)
- STM32——继电器控制灯的开关
- 记录一次Oracle自动化测试工具 - OATS实战分享
- 程序员女朋友礼物python代码_@程序员,用 Python 给女朋友准备个儿童节礼物可好?...
- iOS开发-改变图片的颜色
热门文章
- 百度小程序怎么添加到主屏幕将百度小程序放到手机桌面?
- android版本兼容API24,Android 7.0 (API 24) 适配
- 基于pytorch下用LSTM做股票预测——超详细
- 利用python识别身份证号后获取年龄和性别信息
- 电信物联网开放平台_NB-IoT业务对接 Java 后台、Android 前端已完成预研
- mysql从5.7平滑升级到8.0.27
- HTTP 错误 404.3 – Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 1276. 不浪费原料的汉堡制作方案(Medium)
- 超好用的Server酱,推送微信消息
- Android手机步数怎么统计的,手机中运动步数是如何计算的?(15个回答)