目录

前言:

一、Stream流的获取方法

二、Stream流的中间操作方法

三、Stream流的终结方法


前言:

1.什么是Stream流

在java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念。

目的:

用于简化集合和数组操作的API。

2.Stream流的作用是什么,结合了什么技术?

简化了集合,数组操作的API,结合了Lambda表达式。

3.Stream流的思想和使用步骤。

①先得到集合或者数组的Stream流(就是一根传送带);

②把元素放上去;

③然后用这个Stream流简化的API来方便的操作元素;

4.Stream流的三类方法。

①获取Stream流

创建一条流水线,并把数据放到流水线上准备进行操作;

②中间方法

流水线上的操作,一次操作完毕后,还可以继续进行其他操作;

③终结方法

一个Stream流只能有一个终结方法,是流水线上的最后一个操作。

一、Stream流的获取方法

5.集合获取Stream流的方式

可以使用Collection接口中的默认方法Stream()生成流。

6.数组获取Stream流的方式

二、Stream流的中间操作方法

7.Stream流的常用API

三、Stream流的终结方法

8.Stream流的终结方法API

S

注意:

终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream流了。

9.代码演示:

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
​
/** Stream流   简化集合和数组的API  结合了Lambda表达式  支持链式编程*Stream的获取 : Collection 默认stream()生成流* API* filter()  过滤流中数据* limit(long maxSize)  获取前几个元素* skip(long n)  跳过前几个元素* distinct()  去掉重复的元素* concat(Stream a,Stream b)  合并a和b两个流为一个流* compare  比较器* 收集Stream  :就是把Stream流操作后的数据转回到集合或者数组中去。* collect(Collector,collector)*/
public class Stream_Demo7 {public static void main(String[] args) {List<String> lists = new ArrayList<>();lists.add("张无忌");lists.add("周芷若");lists.add("张三");lists.add("李四");lists.add("王五");Collections.addAll(lists,"张强","赵敏","张三丰");System.out.println(lists);
​//找名字为张的名字List<String> zhanglist = new ArrayList<>();for (String list : lists) {if (list.startsWith("张")){zhanglist.add(list);}}System.out.println(zhanglist);//找名字长度是3的名字,的张姓名字List<String> Threelist = new ArrayList<>();for (String list : zhanglist) {if (list.length()  == 3){Threelist.add(list);}}System.out.println(Threelist);System.out.println("=====================================");//3.Stream流实现  过滤lists.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));//总数long size =lists.stream().filter(s -> s.length() == 3).count();System.out.println(size);//取前几个名字lists.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));//跳过前几个名字lists.stream().filter(s -> s.startsWith("张")).skip(1).forEach(s -> System.out.println(s));//Map加工方法  给集合元素的前面都加上:黑马的: 。lists.stream().map(s -> "黑马的:"+s).forEach(s -> System.out.println(s));
​System.out.println("=========================");//合并两个流Stream<String> s1 = lists.stream().filter(s -> s.startsWith("张"));Stream<String> s2 = Stream.of("JAVA","Python","Html");Stream<Object> s3 = Stream.concat(s1,s2);//只能合并两个流s3.forEach(s-> System.out.println(s));
​
​//获取流//Collection 的Stream流的获取Collection<String> list = new ArrayList<>();Stream<String> stream =list.stream();
​//Map 的Stream流的获取Map<String,Integer> map = new HashMap<>();//键流Stream<String> keystream =map.keySet().stream();//值流Stream<Integer> valuestream =map.values().stream();//键值对流(整体)Stream<Map.Entry<String,Integer>> keyandvalue =map.entrySet().stream();
​//数组Stream流的获取String[] names = {"赵敏","小昭","刘备"};//方法一Stream<String>namesstream1 =Arrays.stream(names);//方法二Stream<String>namesstream2 = Stream.of(names);
​System.out.println("====================================");// 收集Stream collect(Collector,collector)  :就是把Stream流操作后的数据转回到集合或者数组中去。List<String> ls = new ArrayList<>();ls.add("张无忌");ls.add("周芷若");ls.add("张三");ls.add("李四");ls.add("王五");Collections.addAll(ls,"张强","赵敏","张三丰");System.out.println(ls);
​Stream<String> s5 = ls.stream().filter(s ->s.startsWith("张"));List<String> zhangstream1 = s5.collect(Collectors.toList());System.out.println(zhangstream1);
​//注意: 流只能使用一次Stream<String> s4 = ls.stream().filter(s ->s.startsWith("张"));//再建一个流Set<String> zhangset = s4.collect(Collectors.toSet());System.out.println(zhangset);
​System.out.println("======================");Stream<String> s7 = ls.stream().filter(s ->s.startsWith("张"));String[] arrs = s7.toArray(String[]::new);//扩展,可以不用System.out.println("Arrays数组内容:"+Arrays.toString(arrs));}
}

10.案例

需求:

某公司的开发部门,分为开发一部和二部,现在需要进行年中数据结算。

分析:

①员工信息至少包含两(名称,性别,工资,奖金,处罚记录);

②开发一部有4个员工,开发二部有5名员工;

③分别筛选出2个部门的最高工资的员工信息;

职员类:

public class Employee {private String name;private char sex;private double salary;private double bonus;//奖金private String punish;//处罚记录
​public Employee(String name, char sex, double salary, double bonus, String punish) {this.name = name;this.sex = sex;this.salary = salary;this.bonus = bonus;this.punish = punish;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public char getSex() {return sex;}
​public void setSex(char sex) {this.sex = sex;}
​public double getSalary() {return salary;}
​public void setSalary(double salary) {this.salary = salary;}
​public double getBonus() {return bonus;}
​public void setBonus(double bonus) {this.bonus = bonus;}
​public String getPunish() {return punish;}
​public void setPunish(String punish) {this.punish = punish;}
​@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", sex=" + sex +", salary=" + salary +", bonus=" + bonus +", punish='" + punish + '\'' +'}';}
}

Topperformer类:

public class Topperformer {private String name;private double money;//月薪
​public Topperformer(String name, double money) {this.name = name;this.money = money;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public double getMoney() {return money;}
​public void setMoney(double money) {this.money = money;}
​@Overridepublic String toString() {return "Topperformer{" +"name='" + name + '\'' +", money=" + money +'}';}
}

Test类:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
​
public class Stream_Teat {public static double allMoney;public static double allMoney2;//两个部门的总和public static void main(String[] args) {List<Employee> one = new ArrayList<>();one.add(new Employee("张三",'男',30000,25000,null));one.add(new Employee("李四",'男',30000,2500,null));one.add(new Employee("王五",'男',15000,25000,null));one.add(new Employee("刘备",'男',20000,25000,null));List<Employee> two = new ArrayList<>();two.add(new Employee("赵云",'男',30000,25000,null));two.add(new Employee("关羽",'男',45000,25000,"桀骜不驯"));two.add(new Employee("张飞",'男',40000,25000,"骂人"));two.add(new Employee("黄忠",'男',15000,25000,"养老金"));two.add(new Employee("马超",'男',25000,25000,null));
​//1.找出开发一部的最高工资。
//        Employee e =one.stream().max((e1,e2) ->Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
//                    .get();
//        System.out.println(e);Topperformer t =one.stream().max((e1,e2) ->Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())).map(e -> new Topperformer(e.getName(), e.getSalary()+e.getBonus())).get();System.out.println(t);//2.统计平均工资,去掉最高工资和最低工资one.stream().sorted((e1,e2) -> Double.compare(e1.getSalary()+ e1.getBonus(), e2.getSalary()+ e2.getBonus())).skip(1).limit(one.size()-2).forEach(e ->{//求出总和,剩余员工的工资总和allMoney +=(e.getSalary()+e.getBonus());});System.out.println("开发一部的平均工资是:"+ allMoney/(one.size()-2));//合并2个集合流,再统计。Stream<Employee> s1 = one.stream();Stream<Employee> s2 = two.stream();Stream<Employee> s3 = Stream.concat(s1,s2);s3.sorted((e1,e2) -> Double.compare(e1.getSalary()+ e1.getBonus(), e2.getSalary()+ e2.getBonus())).skip(1).limit(one.size()+ two.size()-2).forEach(e ->{//求出总和,剩余员工的工资总和allMoney2 +=(e.getSalary()+e.getBonus());});System.out.println("开发部的平均工资是:"+ allMoney2/(one.size()+two.size() -2));}
}

11.Stream流的收集操作

①收集Stream流的含义:就是把Stream流操作后的结果数据转回到集合或者数组中去。

②Stream流:方便操作集合/数组的手段。

③Stream流的收集操作

④Collectors工具类提供了具体的收集方式

12.代码演示:

/** Stream流   简化集合和数组的API  结合了Lambda表达式  支持链式编程*Stream的获取 : Collection 默认stream()生成流* API* filter()  过滤流中数据* limit(long maxSize)  获取前几个元素* skip(long n)  跳过前几个元素* distinct()  去掉重复的元素* concat(Stream a,Stream b)  合并a和b两个流为一个流* compare  比较器* 收集Stream  :就是把Stream流操作后的数据转回到集合或者数组中去。* collect(Collector,collector)*/
public class Stream_Demo7 {public static void main(String[] args) {// 收集Stream collect(Collector,collector)  :就是把Stream流操作后的数据转回到集合或者数组中去。List<String> ls = new ArrayList<>();ls.add("张无忌");ls.add("周芷若");ls.add("张三");ls.add("李四");ls.add("王五");Collections.addAll(ls,"张强","赵敏","张三丰");System.out.println(ls);
​Stream<String> s5 = ls.stream().filter(s ->s.startsWith("张"));List<String> zhangstream1 = s5.collect(Collectors.toList());System.out.println(zhangstream1);
​//注意: 流只能使用一次Stream<String> s4 = ls.stream().filter(s ->s.startsWith("张"));//再建一个流Set<String> zhangset = s4.collect(Collectors.toSet());System.out.println(zhangset);
​System.out.println("======================");Stream<String> s7 = ls.stream().filter(s ->s.startsWith("张"));String[] arrs = s7.toArray(String[]::new);//扩展,可以不用System.out.println("Arrays数组内容:"+Arrays.toString(arrs));}
}

(二十八)Stream流相关推荐

  1. JavaScript学习(二十八)—事件冒泡和事件捕获

    JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...

  2. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  3. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  4. 关闭数字健康 android 魅族,数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享...

    数字体验 篇二十八:精雕细刻,只为给魅友更好的选择,魅族16s Pro体验分享 2019-09-06 17:31:22 14点赞 10收藏 15评论 当我还一直在称赞魅族16s所拥有的舒适手感表现时, ...

  5. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  6. SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  7. RecyclerView完全解析,让你从此爱上它(二十八)

    RecyclerView完全解析,让你从此爱上它(二十八) 2015-11-20      0 个评论   来源: 专注移动开发,项目管理.jiangqqlmj   收藏   我要投稿 (一).前言: ...

  8. 教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道)

    教你一百二十八个说话的技巧(气质很内涵)(有霸气不霸道) 1.说话不要有攻击性,不要有杀伤力,不夸已能,不扬人恶,自然能化敌为友.  2.一个常常看别人缺点的人,自己本身就不够好,因为他没有时间检讨他 ...

  9. 2008R2Win7管理二十八Mail之基本使用

    2008R2Win7管理二十八Mail之基本使用 上篇我们已经安装好了exchange2010,呵呵本片简单介绍和看下ex2010的基本界面和使用 安装完成打开exchange控制台如图所示 汗,有试 ...

最新文章

  1. CentOS6安裝Cacti
  2. matlab knnsearchidx,matlab查找最临近搜索knnsearch
  3. [多图]全球范围内Linux用户普及度数据
  4. 18 FI配置-财务会计-向计算程序分配国家
  5. LeetCode 537. Complex Number Multiplication
  6. Oracle DBHelper
  7. Kubernetes 小白学习笔记(6)--kubernetes的架构与组件-Master组件
  8. 启动虚拟机连接教程,连接教学,一级初级开发虚拟机中的简单指令
  9. 合并两个有序数组C++
  10. ESP8266 WiFi模块和单片机,电脑连接
  11. abb机器人编程指令写字_ABB机器人-编程基本指令之运动指令
  12. 动态阈值_芯片设计进阶之路——门级优化和多阈值电压
  13. C语言中文网教程导航
  14. 计算机组成原理笔记(王道考研) 第六章:总线
  15. 走近国内同人游戏开发者 一探游戏开发的喜与悲
  16. Android:高德SDK的基本使用
  17. ping网址www.baidu.com等返回127.0.0.1
  18. 4种解法 - 最小的k个数
  19. java基础之HashMap刨根问底
  20. networks.agent_net Additional property attachable is not allowed

热门文章

  1. 法硕(非法学)值不值得考?
  2. 由于找不到openni2,CMAKE找不到OpenNI
  3. 【12c】Oracle12cRAC集群使用GNS实现SCAN
  4. 张老太养了两只猫:一只叫小花,今年3岁白色。另一只叫小白,今年3岁花色,编写一个程序,当用户输入小猫的名字时,就显示该猫的名字、年龄、颜色。如果输入的小猫名错误, 则显:张老太没有这只猫。
  5. 深度优先搜索的概念原理、模板和leetcode刷题推荐(js)
  6. 爬取新浪股票财务数据
  7. 我的KendoUI使用经验总结
  8. 假如你是只猫,那一定也很可爱很帅!是只酷酷的猫!
  9. tcga数据下载_手把手帮你分析这些TCGA甲基化内容
  10. 解决IDEA中安装JREBEL插件控制台报JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users\错误