实例

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: 返回这个集合中,取到的任何⼀个对象
@注意:

  1. 在串⾏的流中,findAny和findFirst返回的,都是第⼀个对象
  2. 在并⾏的流中,findAny返回的是最快处理完的那个线程的数据
  3. 在并⾏操作中,对数据没有顺序上的要求,那么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指定的动作,也就是对元素进⾏遍历
@注意:

  1. 在串⾏的流中,forEach和forEachOrdered遍历输出的结果⼀样。
  2. 在并⾏的流中,forEach每次输出的结果不⼀致。
  3. 在并⾏的流中,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方法使用相关推荐

  1. Java案例:集合的Stream方法

    Java案例:集合的Stream方法 ArrayList实现了Collection接口,Collection接口有个缺省方法Stream(),因此ArrayList对象可以直接调用该方法获得集合对象的 ...

  2. JAVA8 Stream方法使用详解reduce、IntStream(二)

    文章目录 一 归约 1.元素求和 2.最大值和最小值 二.数值流 1.映射数值流 2.转换对象流 3.数值范围 三.构建流 1.由值创建流 2.由数组创建流 3.由文件生成流 4.由函数生成流 此章节 ...

  3. JAVA8 Stream方法使用详解Filter、map等用法(一)

    文章目录 一.筛选和切片 1.谓词筛选filter 2.筛选不同的元素distinct 3.截断流limit 4.跳过元素 二.映射 1.map对每个元素应用函数 2.流的扁平化 三.查找和匹配 1. ...

  4. java List的stream()方法解析

    一.简介 常用的4种stream()用法. (1) list.stream().map().collect() 方法,可以获取list中JavaBean的某个字段,转成一个新的list. (2) li ...

  5. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  6. 【Java】Stream流和方法引用

    1 Stream流 1.1 Stream流优化过滤集合 传统方式 用一个循环过滤姓张的人 用一个循环过滤名字长度大于2的人 public static void main(String[] args) ...

  7. Lambda 表达式详解~Streams API~Stream常见接口方法

    你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁函数式编程写出的代码简洁且意图明确, ...

  8. 这个方法可以让你的代码高出一个逼格——掌握 Java Stream 流操作

    概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream` 的操作符大体上分为两种:`中间操作符`和`终止操 ...

  9. java8函数式编程之Stream流处理的方法和案例讲解

    函数式编程最早是数学家阿隆佐·邱奇研究的一套函数变换逻辑,又称Lambda Calculus(λ-Calculus),所以也经常把函数式编程称为Lambda计算. 为什么Java需要Lambda表达式 ...

最新文章

  1. micropythonesp8266的温度湿度_用ESP8266上传温湿度给ONENET(不需要arduino)
  2. Sensors Data:初创公司构建数据分析平台
  3. 一款适用于家庭智能设备的带摄像头的开发板—最主要是价格低的超乎你想象
  4. shell 与 空格
  5. Hadoop + Amazon EC2 –更新的教程
  6. 约瑟夫环问题---循环单链表
  7. php教程水印,PHP教程之ImageTTFText函数实现图像加文字水印的详细资料说明
  8. Python中为啥 ‘abcd‘<‘ad‘ 答案他来啦
  9. 营销团队管理必备101招
  10. @Transactional之Spring事务深入理解
  11. springboot属性配置
  12. Linux如何切换字符或者图形界面
  13. MYSQL 随机字符串
  14. 16进制在计算机上显示,16进制计算器(16进制计算器安卓版)
  15. 百度扩容软件V.2.3版,第四代扩容带自助修复功能
  16. 蒙特卡罗模拟计算定积分(R)
  17. JVM垃圾回收的二次标记
  18. APICloud前端框架
  19. L2-003. 月饼
  20. [转载]Matlab绘图-很详细,很全面(包含各种标示符的输入方法)

热门文章

  1. 冰河世纪3:恐龙现身
  2. Android 快速接入腾讯云人脸核身(识别)
  3. 计算机无法启动命令,你的电脑未正确启动怎么用命令提示符修复
  4. tensorflow实现自编码网络
  5. android QQ第三方登陆 错误 登陆授权失败(错误码:110406)
  6. 【web课程设计】用HTML+CSS做一个漂亮简单的动漫网页
  7. HTTP代理是什么意思?HTTP代理有什么用处?
  8. 一个最简单的Lucene例子
  9. iis put漏洞poc
  10. 史上最全的 java正则校验 家庭住址 手机号 姓名等