一  常见创建流的三种方式

        //list集合创建流方式
new ArrayList<>().stream();
new HashSet<>().stream(); //map集合创建流方式, 原理同list
HashMap<Object, Object> map = new HashMap<>();
Stream<Object> stream2 = map.keySet().stream();
Stream<Object> stream3 = map.values().stream();
Stream<Map.Entry<Object, Object>> stream4 = map.entrySet().stream(); //数组创建流的方式(可变参数)
String[] arr = {"hello"};
Stream.of(arr);

解:map本身不可以直接创建流使用,但是可以单独拉出来当作list处理

二 stream 中间操作 filter 的使用(过滤操作,过滤后可能会减少数据)

        List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//以"张"开头的控制台输出
list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
//长度为3的在控制台输出
list.stream().filter(s->s.length() == 3).forEach(System.out::println);
//以"张"开头的并长度为3的在控制台输出
list.stream().filter(s->s.startsWith("张")).filter(s->s.length() == 3).forEach(System.out::println);
"System.out::println" 这种格式的叫方法引用同 "s->System.out.println(s)"
解:filter 是过滤数据,看是否否和条件返回布尔值,过滤过后数据会减少 , map 是最终返回一个结果,所以数据量上面不会变化,但有可能数据会发生改变

三 Stream 常见的中间操作limit & skip

 List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌"); //取前三个数据在控制台输出
list.stream().limit(3).forEach(System.out::println);
//跳过三个元素把剩余的元素的控制台输出
list.stream().skip(3).forEach(System.out::println);
//跳过两个元素,把剩下的元素中前两个元素在控制台输出
list.stream().skip(2).limit(2).forEach(System.out::println);

解:limit 是截取数据操作,skip 是跳跃数据操作。 对应括号填写相应的数

四 Stream 常见中间操作 concat & distanct

        List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌"); //取前4个组成一个流
Stream<String> limit = list.stream().limit(4);
//跳过两个数据组成一个流
Stream<String> skip = list.stream().skip(2);
//合并需求1和2流,并把结果在控制台输出
Stream.concat(limit,skip).forEach(System.out::println);
//合并需求1和2流,并把结果在控制台输出要求不能重复
Stream.concat(limit,skip).distinct().forEach(System.out::println);

解:concat 是合并操作,这里将两个流合并起来并输出(两个流互不影响), distinct 是数据去重操作。

五 Stream 常见中间操作 sorted

        List<String> list = new ArrayList<>();
list.add("lingqingxia");
list.add("zhangmanyux");
list.add("wangzuxianx");
list.add("liuyan");
list.add("zhangmin");
list.add("zhangwuji"); //按照字母顺序排序在控制台输出
list.stream().sorted().forEach(System.out::println);
//按照字符串长度,然后按照字母顺序在控制台输出
list.stream().sorted((s1,s2)->{
int num = s1.length() - s2.length();
return num == 0 ? s1.compareTo(s2) : num;
}).forEach(System.out::println);

解:sorted 排序操作,默认按字典顺序排序

六 Stream 常见中间操作 Map(过滤后数据不会减少 可能修改了某些内容)

List<String> list = new ArrayList<>();
list.add("01");
list.add("10");
list.add("20");
list.add("30");
list.add("40");
list.add("50"); //对字符进行数据转换
list.stream().map(Integer::parseInt).forEach(System.out::println);
//mapToInt 不仅有map属性还带有特殊方法,求和求平均数等操作
list.stream().mapToInt(s->Integer.parseInt(s)).forEach(System.out::println);
//mapToInt 转换int并求和
int sum = list.stream().mapToInt(Integer::parseInt).sum();
System.out.println(sum);

解:map处理数据并不会影响最后数据的总量

七 Stream 终结操作 foreach & count

 List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//把集合中的元素在控制台输出控制台上
list.stream().forEach(System.out::println);
//把集合中的元素数量输出到控制台上
long count = list.stream().count();
System.out.println(count);

解: foreach 遍历循环操作,count 数量聚合操作

八 Stream 收集操作collection list

List<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");
//生成流
Stream<String> listStream = list.stream().filter(s -> s.length() == 3);
//生成新的集合
List<String> stringList = listStream.collect(Collectors.toList());

Collections.toList() 变成list集合

Collections.toSet() 变成set集合

九 Stream 收集操作collection map

        String[] arr = {"林青霞,33","张曼玉,28","柳岩,22"};
Map<String, String> maps = Stream.of(arr).collect(Collectors.toMap(s -> s.split(",")[0], s1 -> s1.split(",")[1]));
for (Map.Entry<String, String> entry : maps.entrySet()) {
System.out.println("姓名:"+entry.getKey()+",年龄"+entry.getValue());
}

Collections.toMap(k,v)

最新文章

  1. MYSQL远程登录权限设置 ,可以让Navicat远程连接服务器的数据库
  2. WPF面试准备
  3. easyui combobox 值怎样获取
  4. 《ASP.NET1200例》实现投票的用户控件
  5. 获取枚举类型Description特性的描述信息
  6. 获取checkbox复选框的值
  7. go对json的解析处理
  8. matplotlib作图中文显示问题
  9. Web---HTTP请求、重定向、转发和数据压缩
  10. python中os模块的常用接口和异常中Exception的运用
  11. LBS 与 GPS 定位之间的区别
  12. Java---文件夹及文件操作
  13. AspNet.WebAPI.OData.ODataPQ
  14. iOS启动屏 ➕ 闪屏的方法
  15. JDK+Tomcat+Zookeeper+DubboAdmin安装教程
  16. django(权限、认证)系统——第三方组件实现Object级别权限控制
  17. Java基础小知识笔记
  18. 根据bootstrap框架实现移动端触摸滑动的方法
  19. H5实现全屏与F11全屏
  20. python字节(bytes)

热门文章

  1. 亚马孙机器可能出现权限问题导致ssh无法秘钥登录的情况
  2. Zookeeper+SpringCloud微服务(入门二)
  3. 《深入理解java虚拟机》第七章读书笔记——虚拟机类加载机制
  4. Kali Linux Web 渗透测试秘籍 中文版
  5. 如何通过Java 代码设置 Word 文档页边距
  6. openfoam UPstream类探索(二)
  7. pdf.js打开后的pdf文件
  8. JavaScript查找两个节点的最近的一个共同父节点,可以包括节点自身
  9. 7. Light (对象)
  10. ubuntu系统的虚机 迁移到大厂的云服务器 后发现 实例内网一直都是原虚机的内网IP,