Stream方法使用
实例
List<AccessAuthorityTypeUser> detailByClientId = sysCliAccessAuthorityUsersMapper.getDetailByClientId(clientId);if (detailByClientId.stream().filter(c -> c.getUserId().equals(parameter)).findAny().isPresent()) {return true;
}# isPresent 返回true或false
# findAny 取到的任何⼀个对象
1.stream⽅法使⽤
stream跟函数接⼝关系⾮常紧密,没有函数接⼝stream就⽆法⼯作。函数接⼝是指内部只有⼀个抽象⽅法的接⼝。通常函数接⼝出现的地
⽅都可以使⽤Lambda表达式,所以不必记忆函数接⼝的名字。
2.中间操作⽅法
2.1 concat() : 合并两个stream
签名:
static Stream concat(Stream extends T> a,tream extends T> b)
作⽤:
创建⼀个延迟连接的流,其元素是a的所有元素和b的所有元素。
如果两个输⼊流都是有序的,则对所得到的流进⾏排序。
如果任⼀输⼊流是并⾏的,则得到的流是平⾏的。
关闭结果流时,将调⽤两个输⼊流的关闭处理程序。
代码:
public static void main(String[] args) { // 创建两个stream对象 Stream language1 = Stream.of("PHP", "JAVA"); Stream language2 = Stream.of("GO", "PYTHON")
更多concat⽤例
2.2 distinct() : 去重
说明: 返回:返回由该流的不同元素(根据 Object.equals(Object) )组成的Stream。
代码:
List strings = Arrays.asList("AA", "BB", "CC", "AA", "BB");
List collect = strings.stream().distinct().collect(Collectors.toList());
System.out.println(collect);//[AA, B
2.3 filter() : 过滤
签名:
Stream filter(Predicate super T> predicate)
返回:作⽤是返回⼀个只包含满⾜predicate条件元素的Stream
代码:
List<Integer> integers = Arrays.asList(10, 12, 71, 63, 921, 68, 121);
List collect = integers.stream().filter(integer -> integer > 100).collect(Collectors.toList());
System.out.println(collect) //[921, 121]
2.4 flatMap() : 合并
签名:
Stream flatMap(Function super T,? extends Stream extends R>> mapper)
作⽤:把⼏个⼩的list转换到⼀个⼤的list
效果⽰意图:
代码:
// 初始化⼀个嵌套集合 [[1, 2], [3, 4, 5]]ArrayList> arrayLists = new ArrayList(){{ add(Arrays.asList(1, 2)); add(Arrays.asList(3, 4, 5));}};// 使⽤flatMap 把多个⼩集
2.5 limit() : 截取(返回前N个元素)
签名:
Stream limit(long maxSize)
作⽤:对⼀个Stream进⾏截断操作,获取其前N个元素,如果原Stream中包含的元素个数⼩于N,那就获取其所有的元素;
代码:
// 声明⼀个listList integers = Arrays.asList(1, 2, 3, 4, 5);// 取出前三个元素
List collect1 = `integers.stream().limit(3).collect(Collectors.toList());
System.out.println(collect1); //[1,2,3]
2.6 skip() : 截取(返回不包含前N个元素)
签名:
Stream skip(long n)
作⽤:返回⼀个丢弃原Stream的前N个元素后剩下元素组成的新Stream,如果原Stream中包含的元素个数⼩于N,那么返回空Stream;
代码:
// 声明⼀个List<Integer> integers = Arrays.asList(10, 12, 71, 63, 921,101,68, 121,110,111,150);
// 取出前三个元素
List collect1 = integers.stream().skip(3).collect(Collectors.toList());
System.out.println(collect1); //[63, 921, 101, 68, 121, 110, 111, 150]
2.7 sorted(): 排序
签名:
Stream sorted()和Stream sorted(Comparator super T> comparator)。
作⽤:返回排序后的Stream;
代码:对整型集合排序
// 声明⼀个list
List<Integer> integers = Arrays.asList(11, 42, 23, 74, 5);
// 默认⾃然序排序
List collect = integers.stream().sorted().collect(Collectors.toList());
System.out.println(collect); //[5, 11, 23, 42, 74]//倒序List collect = integers.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());System.out.println(collect); //[74, 42, 23, 11, 5]//代码:对字符串集合排序
// 声明⼀个list
List<String> strings = Arrays.asList("PHP", "JAVA", "GO", "C", "PYTHON","LUA","ABC");
List collect = strings.stream().sorted().collect(Collectors.toList());
System.out.println(collect ); //[ABC, C, GO, JAVA, LUA, PHP, PYTHON]
由上⾯例⼦,可以看出对字符串集合排序时,会发现简单使⽤sorted会有问题!!
2.8 map(): 递归处理
签名:
Stream map(Function super T,? extends R> mapper)。
作⽤:返回⼀个对当前所有元素执⾏mapper之后的结果组成的Stream。直观的说,就是对每个元素按照某种操作进⾏转换,转换前后
Stream中元素的个数不会改变,但元素的类型取决于转换之后的类型;
代码
// 声明⼀个list
List strings = Arrays.asList(“PHP”, “JAVA”, “GO”, “C”, “PYTHON”,“LUA”);
List collect = strings.stream().map(s -> s.toLowerCase()).collect(Collectors.toArray());
System.out.println(collect ); // [php, java, go, c, python, lua]
3.结束操作⽅法
3.1 allMatch(): 判断(都是)
签名:
boolean allMatch(Predicate super T> predicate)
作⽤:判断条件⾥的元素都满⾜,则返回true
代码
// 声明⼀个listList integers = Arrays.asList(1, 2, 3, 4, 5);boolean a = integers.stream().allMatch(integer -> integer > 10);System.out.println("所有元素都⼤于10 ==> "
3.2 anyMatch(): 判断(有⼀个是)
签名:
boolean anyMatch(Predicate super T> predicate)
作⽤:判断条件⾥的元素有⼀个满⾜,则返回true
代码
// 声明⼀个listList integers = Arrays.asList(1, 2, 3, 4, 5, 11);boolean a = integers.stream().anyMatch(integer -> integer > 10);System.out.println("所有元素都⼤于10
3.3 noneMatch(): 判断(都不是)
签名:
boolean noneMatch(Predicate super T> predicate)
作⽤:跟allMatch相反,判断条件⾥的元素都不满⾜,则返回true
代码
// 声明⼀个listList integers = Arrays.asList(1, 2, 3, 4, 5, 11);boolean a = integers.stream().noneMatch(integer -> integer > 10);System.out.println("所有元素都⼤于1
3.4 count(): 统计
签名:
long count()
作⽤:统计个数
代码
// 声明⼀个listList integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10);long count = integers.stream().count();System.out.println("总个数 ==> " + count + “”);// 总
3.5 max()、mix(): 最⼤和最⼩
签名:
Optional max(Comparator super T> comparator)Optional min(Comparator super T> comparator)
作⽤:返回最⼤和最⼩
代码
// 声明⼀个整型listList integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);Integer max = integers.stream().max(Comparator.comparing(Integer::valueOf)).get();Sy
获取最⼤和最⼩对象
3.6 findAny() findFirst() 查找
签名:
Optional findFirst()Optional findAny()
作⽤:
findFirst: 返回集合的第⼀个对象
findAny: 返回这个集合中,取到的任何⼀个对象
@注意:
- 在串⾏的流中,findAny和findFirst返回的,都是第⼀个对象
- 在并⾏的流中,findAny返回的是最快处理完的那个线程的数据
- 在并⾏操作中,对数据没有顺序上的要求,那么findAny的效率会⽐findFirst要快的
代码
// 声明⼀个整型listList integers = Arrays.asList(10, 32, 23, 14, 51, 64, 72, 81, 59, 110);Object[] objects = integers.stream().sorted().toArray();Integer findFirst = inte
3.7 reduce() ⽣成⼀个符合的值
签名:
三种重写形式:
// 第⼀种Optional reduce(BinaryOperator accumulator)// 第⼆种T reduce(T identity, BinaryOperator accumulator)// 第三种 U reduce(U identity, BiFunction
说明:
reduce操作可以实现从⼀组元素中⽣成⼀个值,sum()、max()、min()、count()等都是reduce操作,将他们单独设为函数只是因为常⽤
代码
// 声明⼀个整型listList integers = Arrays.asList(1,2,3,4,5);// 集合元素求和,Integer sum = integers.stream().reduce(Integer::sum).get();System.out.println("求和 => "
3.8 forEach() 遍历
签名:
void forEach(Consumer super E> action)
**作⽤:**是对容器中的每个元素执⾏action指定的动作,也就是对元素进⾏遍历
代码
// 声明⼀个MapHashMap gradeMap = new HashMap(4) {{ put(“张三”, 82); put(“李四”, 70); put(“⼩明”, 91); put(“⽼王”, 59);}};// 遍历mapgradeMap.entrySet
3.9 forEachOrdered() 遍历
签名:
void forEachOrdered(Consumer super T> action)
**作⽤:**是对容器中的每个元素执⾏action指定的动作,也就是对元素进⾏遍历
@注意:
- 在串⾏的流中,forEach和forEachOrdered遍历输出的结果⼀样。
- 在并⾏的流中,forEach每次输出的结果不⼀致。
- 在并⾏的流中,forEachOrdered每次输出的结果⼀致。
代码
// 在串⾏流中: 遍历集合List strings = Arrays.asList(1, 2, 3, 4, 5);strings.stream().forEach(s -> System.out.println("串⾏流-forEach => " + s + " "));strings.stream().fo
Java8 parallelStream浅析-知乎
3.10 toArray() 转成数组
签名:
A[] toArray(IntFunction generator)
作⽤: 将流转成数组
代码
List integerList = Arrays.asList(1, 2, 3,4,5,6,7,8,9);Integer[] integers = integerList.stream().filter(integer -> integer % 3 == 0).toArray(Integer[]::new);System
3.11 collect()
由于collect过于特殊和强⼤,拉出去单讲【collect() 和 Collectors(收集器) 】。
list某两列转成map集合
Map<Long, Long> map = yxhActivityDOS.stream().collect(Collectors.toMap(YxhActivityDO::getStoreId, YxhActivityDO::getActivityCount));
Stream方法使用相关推荐
- Java案例:集合的Stream方法
Java案例:集合的Stream方法 ArrayList实现了Collection接口,Collection接口有个缺省方法Stream(),因此ArrayList对象可以直接调用该方法获得集合对象的 ...
- JAVA8 Stream方法使用详解reduce、IntStream(二)
文章目录 一 归约 1.元素求和 2.最大值和最小值 二.数值流 1.映射数值流 2.转换对象流 3.数值范围 三.构建流 1.由值创建流 2.由数组创建流 3.由文件生成流 4.由函数生成流 此章节 ...
- JAVA8 Stream方法使用详解Filter、map等用法(一)
文章目录 一.筛选和切片 1.谓词筛选filter 2.筛选不同的元素distinct 3.截断流limit 4.跳过元素 二.映射 1.map对每个元素应用函数 2.流的扁平化 三.查找和匹配 1. ...
- java List的stream()方法解析
一.简介 常用的4种stream()用法. (1) list.stream().map().collect() 方法,可以获取list中JavaBean的某个字段,转成一个新的list. (2) li ...
- 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类
1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...
- 【Java】Stream流和方法引用
1 Stream流 1.1 Stream流优化过滤集合 传统方式 用一个循环过滤姓张的人 用一个循环过滤名字长度大于2的人 public static void main(String[] args) ...
- Lambda 表达式详解~Streams API~Stream常见接口方法
你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁函数式编程写出的代码简洁且意图明确, ...
- 这个方法可以让你的代码高出一个逼格——掌握 Java Stream 流操作
概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream` 的操作符大体上分为两种:`中间操作符`和`终止操 ...
- java8函数式编程之Stream流处理的方法和案例讲解
函数式编程最早是数学家阿隆佐·邱奇研究的一套函数变换逻辑,又称Lambda Calculus(λ-Calculus),所以也经常把函数式编程称为Lambda计算. 为什么Java需要Lambda表达式 ...
最新文章
- micropythonesp8266的温度湿度_用ESP8266上传温湿度给ONENET(不需要arduino)
- Sensors Data:初创公司构建数据分析平台
- 一款适用于家庭智能设备的带摄像头的开发板—最主要是价格低的超乎你想象
- shell 与 空格
- Hadoop + Amazon EC2 –更新的教程
- 约瑟夫环问题---循环单链表
- php教程水印,PHP教程之ImageTTFText函数实现图像加文字水印的详细资料说明
- Python中为啥 ‘abcd‘<‘ad‘ 答案他来啦
- 营销团队管理必备101招
- @Transactional之Spring事务深入理解
- springboot属性配置
- Linux如何切换字符或者图形界面
- MYSQL 随机字符串
- 16进制在计算机上显示,16进制计算器(16进制计算器安卓版)
- 百度扩容软件V.2.3版,第四代扩容带自助修复功能
- 蒙特卡罗模拟计算定积分(R)
- JVM垃圾回收的二次标记
- APICloud前端框架
- L2-003. 月饼
- [转载]Matlab绘图-很详细,很全面(包含各种标示符的输入方法)