接下来用一个例子来展示一下集合的应用以及流的操作主函数自行编写哈;
下面这个类是一个接口的实现类,里面对泛类为Students的List执行了各种操作,但是很多操作都先将集合转型成了Stream也就是流,然后根据流的各种操作而操作,这样有什么样的好处呢?
流就像一条生产线上的物件,将集合转成流就像将其放在生产线上,一条生产线上可以先后执行许多操作最终得到想要的结果,就像下面这一段代码,一条生产线上可以有这么多个操作于是就节省了许多代码,也提升了代码的简洁性;

return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year).collect(Collectors.toList());

所以将集合转型成流操作就有这样的好处,而且这样操作得到的“产品”也可以多样化:

 return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year&&s.getSex()==sex).map(s->s.getName()).collect(Collectors.toList());

以上代码就生成了与List不一样的集合,也就是产生了不一样的“产品”,这也是流的好处。
除了以上以外下面代码还有有关集合的其他操作,客官也就自行汲取自己想要看的东西吧。

package com.experiment04.Service.impl;import com.experiment04.Service.StudentService;
import com.experiment04.entity.Student;
import com.experiment04.resource.DatabaseUtils;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StudentServiceImpl implements StudentService {@Overridepublic   List<Student> addStudent(Student student) {DatabaseUtils.getStudents().add(student);return DatabaseUtils.getStudents() ;}@Overridepublic List<Student> listStudentsByYear(int year) {return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year).collect(Collectors.toList());}@Overridepublic List<String> listStudentsNames(int year, Student.Sex sex) {return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year&&s.getSex()==sex).map(s->s.getName()).collect(Collectors.toList());}@Overridepublic Map<Student.Sex, List<Student>> mapStudentsBySex() {return  DatabaseUtils.getStudents().stream().collect(Collectors.groupingBy(Student::getSex));}@Overridepublic boolean removeStudent(int id) {return DatabaseUtils.getStudents().removeIf(s->s.getId()==id);}
}

接下来几个是上面用到的封装好的几个类和接口
学生类:包含了ID 性别 姓名等几个成员变量,以及一个带参构造方法,和几个get、set方法;

package com.experiment04.entity;public class Student {public enum Sex {MALE, FEMALE}private int id;private Sex sex;private String name;// 例如2017级private int year;public Student(int id, Sex sex, String name, int year) {this.id = id;this.sex = sex;this.name = name;this.year = year;}public int getId() {return id;}public void setId(int id) {this.id = id;}public Sex getSex() {return sex;}public void setSex(Sex sex) {this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getYear() {return year;}public void setYear(int year) {this.year = year;}
}

DatabaseUtils类 :创建一个初始的学生集合并用get方法传送:

package com.experiment04.resource;import com.experiment04.entity.Student;import java.util.ArrayList;
import java.util.List;public class DatabaseUtils {private static final List<Student> STUDENTS = create();private static List<Student> create() {List<Student> students = new ArrayList<>();students.add(new Student(201001, Student.Sex.FEMALE, "赵阳阳", 2010));students.add(new Student(201002, Student.Sex.MALE, "邵鹏", 2010));students.add(new Student(201103, Student.Sex.MALE, "高学斌", 2011));students.add(new Student(201104, Student.Sex.MALE, "张扬", 2011));students.add(new Student(201205, Student.Sex.FEMALE, "吕惠玲", 2012));students.add(new Student(201206, Student.Sex.MALE, "曾志优", 2012));return students;}public static List<Student> getStudents() {return STUDENTS;}
}

StudentService接口类:里面声明了各种对学生集合的操作的抽象方法由最开始的StudentServiceImpl类实现:

package com.experiment04.Service.impl;import com.experiment04.Service.StudentService;
import com.experiment04.entity.Student;
import com.experiment04.resource.DatabaseUtils;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StudentServiceImpl implements StudentService {@Overridepublic   List<Student> addStudent(Student student) {DatabaseUtils.getStudents().add(student);return DatabaseUtils.getStudents() ;}@Overridepublic List<Student> listStudentsByYear(int year) {return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year).collect(Collectors.toList());}@Overridepublic List<String> listStudentsNames(int year, Student.Sex sex) {return DatabaseUtils.getStudents().stream().filter(s->s.getYear()==year&&s.getSex()==sex).map(s->s.getName()).collect(Collectors.toList());}@Overridepublic Map<Student.Sex, List<Student>> mapStudentsBySex() {return  DatabaseUtils.getStudents().stream().collect(Collectors.groupingBy(Student::getSex));}@Overridepublic boolean removeStudent(int id) {return DatabaseUtils.getStudents().removeIf(s->s.getId()==id);}
}

java-----集合的常规操作(流操作)相关推荐

  1. java字节流分为_Java的流操作分为字节流和字符流两种。

    Java的流操作分为字节流和字符流两种.           1. 字节流  所有的读操作都继承自一个公共超类java.io.InputStream类.  所有的写操作都继承自一个公共超类java.i ...

  2. java基础总结(二十一)--流操作时为什么要关闭流

    需要自己close的东西,一般都是用了虚拟机之外的资源,例如端口,显存,文件等,虚拟机无法通过垃圾回收释放这些资源,只能你显式调用close方法来释放. 许多情况下,如果在一些比较频繁的操作中,不对流 ...

  3. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 1 //获取sock ...

  4. Java集合之LinkedList常见实例操作,实例说明

    一.LinkedList常见操作 package List相关; /*** LinkedList 链接列表* LinkedList:底层使用的链表数据结构.特点:增删速度快,查询速度稍慢:*/impo ...

  5. 【Java】java测试--词频统计 ----IO流操作

    (1).新建文本文件data.txt (2)   随便输入一些英文单词,单词之间用 "空格"隔开 (3)   统计各个单词出现的次数. (4)对结果进行排序 a.按照次数进行降序 ...

  6. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties...

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  7. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  8. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流...

    File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) •p ...

  9. Java Streams:流操作及示例

    正如我们在Java Streams:流创建中所学到的,流管道由源.零个或多个中间操作和一个终端操作组成. 我们还了解到,streams流是懒惰的:仅当终端操作启动时,才对源数据执行计算. 在本文中,我 ...

  10. java(九)-方法引用, Stream流,File类 , 递归 ,字节流

    day09[方法引用.Lambda表达式.Stream流] 今日目标 线程状态 等待与唤醒 Lambda表达式 Stream流 教学目标 能够说出线程6个状态的名称 能够理解等待唤醒案例 能够掌握La ...

最新文章

  1. C#版本的CPU性能测试
  2. linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf
  3. BeanUtils API中使用ConvertUtils向BeanUtils注册一个日期转换器
  4. 数据库事务隔离级别(转)
  5. linux固定分辨率,如何锁定分辨率
  6. OD 调试带启动参数的程序
  7. 日志分析工具ELK(一)
  8. pat 乙级 1021 个位数统计(C++)
  9. LeetCode 第 35 场双周赛(216/2839,前7.61%)
  10. C#枚举类型的常用操作总结
  11. 专业设计师是哪里找到高质量素材的!
  12. Xcode 模拟器复制解决方案
  13. 在DOS中使用系统还原工具
  14. 专辑:Redis视频教程
  15. python 多个excel合并成多个sheet以及多个excel合并成一个sheet
  16. 来自30岁女程序员的自我唤醒
  17. 牛逼!这届WWDC依旧展现了那个让你无法复制的苹果!
  18. 方寸微 T620 存储安全芯片 安全存储 USB3.0 U盘/移动硬盘
  19. js + jquery 两栏Tab鼠标移入显示/隐藏的效果(详)
  20. 使用STM8单片机+NTC热敏电阻自制简易温度巡检仪

热门文章

  1. 对室内定位——无线定位的技术总结
  2. 【图解红黑树】删除居然这么简单?假的吧?
  3. 关于485通讯(不扯蛋)
  4. QT读取剪切板内容-实现复制粘贴文本和图片
  5. 利用CSS和JS实现抖音超火3d照片墙
  6. 【字节序】大端模式和小端模式
  7. 《C++ 开发从入门到精通》——第1章 说真的,我们还要学习C++吗1.1 C++概述...
  8. 开源轻量好用的录屏和gif制作软件
  9. HttpClient工具类封装
  10. 佳能服务器维护,佳能打印机怎么维护 佳能打印机保养方式