Java基础学习Lambda与Stream(续)
/*
中间操作 : 映射 -> 将stream操作的每个元素转换成另外一个种形式|提取信息
<R> Stream<R> map(Function<? super T,? extends R> mapper) 返回一个流,该流包含将给定函数应用于此流的元素的结果。 ******
Stream操作的每一个元素都会应用参数函数映射为一个结果,最终返回持有所有结果的新的流
<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
Stream操作的每一个元素都会应用参数函数映射为一个结果,这个结果的类型必须为Stream类型,会对所有的结果Stream进行连接,连接成为一个流返回
区别 :
1.map映射的每一个数据结果可以为任意类型
flatMap映射的每一个数据结果只能为Stream类型
2.map不存在结果流连接的情况,直接返回持有结果的新的流
flatMap结果类型肯定为Stream类型,所有先连接再返回一个流,流中操作的为具体的数据
*/
static List<Employee> emps = Arrays.asList(new Employee(1001,"胡歌",35,20000),new Employee(1002,"彭于晏",30,16000),new Employee(1003,"吴彦祖",33,18000),new Employee(1003,"吴彦祖",33,18000),new Employee(1004,"谢霆锋",33,19000),new Employee(1005,"吴磊",22,17000));public static void main(String[] args) {//所有员工的姓名输出emps.stream().distinct()//.map(e->e.getName()).map(Employee::getName).forEach(System.out::println);//把所有的字符串转为大写遍历输出String[] arr = {"aaa","bbbb","cc"};Arrays.stream(arr).map(String::toUpperCase).forEach(System.out::println);//统计字符串数组中每一个字符串的长度输出Arrays.stream(arr).map(String::length).forEach(System.out::println);//把字符串数组中所有的字符串的每一个字符输出Arrays.stream(arr).map(Class003_Stream::getCharacter).forEach(s->{s.forEach(System.out::println);});Arrays.stream(arr).flatMap(Class003_Stream::getCharacter).forEach(System.out::println);}//返回持有字符串中所有字符的流public static Stream<Character> getCharacter(String str){List<Character> list = new ArrayList<>();for(Character ch:str.toCharArray()){list.add(ch);}return list.stream();}
/*
终止行为 :
遍历 foreach()
匹配 :
boolean allMatch(Predicate<? super T> predicate)-检查是否匹配所有元素
anyMatch-检查是否至少匹配一个元素
noneMatch-检查是否没有匹配所有元素
查找 :
findFirst-返回第一个元素
indAny-返回当前流中的任意元素
统计个数 :
count-返回流中元素的总个数
*/
static List<Employee> emps = Arrays.asList(new Employee(1001,"胡歌",35,20000),new Employee(1002,"彭于晏",30,16000),new Employee(1003,"吴彦祖",33,18000),new Employee(1003,"吴彦祖",33,18000),new Employee(1004,"谢霆锋",33,19000),new Employee(1005,"吴磊",22,17000));public static void main(String[] args) {//判断所有的员工年龄是否成员了>=18System.out.println(emps.stream().distinct().allMatch(e->e.getAge()>=18));//查找公司薪资最高的员工Optional<Employee> op1 = emps.stream().distinct().sorted((x,y)->Double.compare(y.getSal(),x.getSal())).findFirst();if (op1.isPresent()){System.out.println(op1.get());}//stream() 顺序流//parallelStream() 并行流 | stream().parallel()//找到年龄在30以上的任意一个员工Optional<Employee> op2 = emps.stream().parallel().distinct().filter(e->e.getAge()>=30).findAny();System.out.println(op2.get());//找到薪资>17000以上的所有员工个数System.out.println(emps.stream().distinct().filter(e->e.getSal()>17000).count());}
/*
终止行为 :
统计 :
Optional<T> max(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最大元素。
Optional<T> min(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最小元素。
规约 : reduce 计算,把流操作的所有元素按照指定的规则进行运算,最终返回结果
注意 : map-reduce先提取数据,然后运算
*/
static List<Employee> emps = Arrays.asList(new Employee(1001,"胡歌",35,20000),new Employee(1002,"彭于晏",30,16000),new Employee(1003,"吴彦祖",33,18000),new Employee(1003,"吴彦祖",33,18000),new Employee(1004,"谢霆锋",33,19000),new Employee(1005,"吴磊",22,17000));public static void main(String[] args) {//薪资小的员工信息System.out.println(emps.stream().distinct().min((x,y)->Double.compare(x.getSal(),y.getSal())).get());//薪资最大的员工姓名System.out.println(emps.stream().distinct().max((x,y)->Double.compare(x.getSal(),y.getSal())).get().getName());Stream<Integer> stream = Stream.of(1,2,3,4,5);//计算所有整数和//System.out.println(stream.reduce((x,y)->x+y).get());;System.out.println(stream.reduce(100,(x,y)->{System.out.println("------------------"+x+" + "+y+" = "+(x+y));return x+y;}));;//通过所有员工的薪资总和double sum = emps.stream().distinct().map(Employee::getSal).reduce((x,y)->x+y).get();System.out.println(sum);}
/*
终止行为 :
收集
collect ,收集,可以说是内容最繁多、功能最丰富的部分了。
从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。
collect 主要依赖 java.util.stream.Collectors 类内置的静态方法。
*/
static List<Employee> emps = Arrays.asList(new Employee(1001,"胡歌",35,20000),new Employee(1002,"彭于晏",30,16000),new Employee(1003,"吴彦祖",33,18000),new Employee(1003,"吴彦祖",33,18000),new Employee(1004,"谢霆锋",33,19000),new Employee(1005,"吴磊",22,17000));public static void main(String[] args) {//收集所有的员工姓名返回List<String> names = emps.stream().map(Employee::getName).collect(Collectors.toList());Set<String> set = emps.stream().map(Employee::getName).collect(Collectors.toSet());System.out.println(set);//收集所有员工的员工编号与员工姓名Map<Integer,String> map = emps.stream().distinct().collect(Collectors.toMap(Employee::getId,Employee::getName));System.out.println(map);//收集所有年龄>30的员工信息System.out.println(emps.stream().distinct().filter(e->e.getAge()>30).collect(Collectors.counting()));;//公司所有员工的平均工资double avg = emps.stream().distinct().collect(Collectors.averagingDouble(Employee::getSal));System.out.println(avg);//公司所有员工的薪资总和double sum = emps.stream().distinct().collect(Collectors.summingDouble(Employee::getSal));System.out.println(sum);//收集所有员工姓名的字符串System.out.println(emps.stream().distinct().map(Employee::getName).collect(Collectors.joining()));;}
Java基础学习Lambda与Stream(续)相关推荐
- JAVA基础知识|lambda与stream
lambda与stream是java8中比较重要两个新特性,lambda表达式采用一种简洁的语法定义代码块,允许我们将行为传递到函数中.之前我们想将行为传递到函数中,仅有的选择是使用匿名内部类,现在我 ...
- Java基础 之 lambda、stream概念及实际使用举例
lambda 什么是lambda 函数式编程,将代码块作为参数传入方法,用更简洁的方法创建一个函数式接口的实例. 什么是函数式接口 一个有且只含有一个抽象方法的接口(可以有多个默认方法). 举个栗子: ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- Java基础学习(12)
Java基础学习 一.不可变集合 二.Stream流 2.1 Stream流数据添加 2.2 Stream流的中间方法 2.3 Stream终结方法 三. 方法引用 3.1 方法引用的基本概念 3.2 ...
- java基础学习-6
Java基础学习-6 双列集合 Map的常见API Map的遍历方式 HashMap 小练习 LinkedHashMap TreeMap TreeMap--小练习1 TreeMap--小练习2 Tre ...
- Java基础学习——第十六章 Java8新特性
Java基础学习--第十六章 Java8 新特性 Java8(JDK8.0)较 JDK7.0 有很多变化或者说是优化,比如 interface 里可以有静态方法和默认方法,并且可以有方法体,这一点就颠 ...
- java基础之lambda表达式
java基础之lambda表达式 1 什么是lambda表达式 lambda表达式是一个匿名函数,允许将一个函数作为另外一个函数的参数,将函数作为参数传递(可理解为一段传递的代码). 2 为什么要用l ...
- 多stream_基础之Lambda和Stream的邂逅
基础之Lambda和Stream的邂逅 show me the code and take to me,做的出来更要说的明白 GitHub项目JavaHouse同步收录 喜欢就点个赞呗! 你的支持是我 ...
- Java基础学习——第十四章 网络编程
Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...
最新文章
- 面向对象进阶2 组合
- P1339 [USACO09OCT]热浪Heat Wave(SPFA)
- StandardContext
- 华为nova6计算机在哪,华为nova6开发者选项在哪
- html文档基本结构由哪三对,第3章 网页制作及HTML语言基本结构简介.ppt
- 常人不解朱啸虎,读懂已是被裁人
- 提高学生对计算机学科学习兴趣的研究的结题报告,《如何在体育教学中运用体育游戏》的研究结题报告...
- beforeEach钩子与无限循环问题
- LAMP YUM安装配置实战
- 项目管理:文档可测试化
- 【015】基于51单片机的LCD1602流动字符串proteus仿真设计
- 局域网之间两台计算机同屏,如何实现内网多电脑同屏协同?
- Mysql 省市区字典(带层级,带经纬度,带拼音)
- 腾讯天龙八部手游服务器账号上线,天龙八部手游服务器的注册已达到上限 服务器注册上限怎么解决...
- gwas snp 和_如何利用分子实验验证GWAS发现的SNP?
- python算积分蒙特卡罗_python编程通过蒙特卡洛法计算定积分详解
- 调用so库文件以及里面的方法
- 在云效平台实现流水线部署遇到的问题及解决
- 哈哈...汗汗...
- linux 内核usleep,Linux的sleep()和usleep()的使用和区别