jdk  8  以后增加stream   接口;

stream 流的 各个方法使用如下:

package Test01;import java.util.ArrayList;
import java.util.function.Predicate;
import java.util.logging.Filter;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 12:43**static interface  Stream.Builder<T> 一个可变的构建器,用于 Stream 。****① 筛选出张    长度  大于2* ②  stream 流** * Collection中 的  default Stream<E> stream​()*/
public class Test09 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("网大嘴");list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");//使用函数式接口for (String s : list) {if (printStr(s,(string)->string.startsWith("张"),(string)->string.length()>2)) {System.out.println(s);}}System.out.println("-------------------------------");
//使用stream  流来完成list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(System.out::println);  //filter  链式调用}public static boolean printStr(String str, Predicate<String> one,Predicate<String> two){boolean test = one.and(two).test(str);
//        System.out.println("满足条件?"+test);return test;}}

通过collection获取对象,

通过map 获取流:

package Test01;import java.util.*;
import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 1:20* <p>* <p>* static <T> Stream<T> of​(T... values) 返回其元素是指定值的顺序排序流。* <p>* ①根据collection   来获取流* ②根据map来获取流*/
public class Test10 {public static void main(String[] args) {
//collection     list    setCollection<String> string1 = new ArrayList<>();Stream<String> s1 = string1.stream();sop(s1);List<String> string2 = new ArrayList<>();Stream<String> s2 = string2.stream();sop(s2);Set<String> string3 = new HashSet<>();Stream<String> s3 = string3.stream();sop(s3);//        java.util.stream.ReferencePipeline$Head@4b6995df
//        java.util.stream.ReferencePipeline$Head@2fc14f68
//        java.util.stream.ReferencePipeline$Head@61443d8f}public static void sop(Object obj) {System.out.println(obj);}
}
package Test01;import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;import static Test01.Test10.sop;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 7:22** 通过map集合  获取stream流* 流需要分key、value或entry等情况:*/
public class Test11 {public static void main(String[] args) {//HashMap<String, Integer> map = new HashMap<>();Stream<Map.Entry<String, Integer>> stream1 = map.entrySet().stream();Stream<Integer> stream2 = map.values().stream();Stream<String> stream3 = map.keySet().stream();//sop(stream1);sop(stream2);sop(stream3);}
}

通过数组来获取流:

package Test01;import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 7:34** String[] array = { "张无忌", "张翠山", "张三丰", "张一元" };*静态的   获取stream流对象* static <T> Stream<T> of​(T t) 返回包含单个元素的序列 Stream 。* static <T> Stream<T> of​(T... values) 返回其元素是指定值的顺序排序流。**/
public class Test12 {public static void main(String[] args) {//String[] array = { "张无忌", "张翠山", "张三丰", "张一元" };Stream<String> array1 = Stream.of(array);array1.forEach(System.out::println);//张无忌//张翠山//张三丰//张一元}
}

filter  选择器,筛选

package Test01;import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 7:41**  把filter转化为子集流      Stream<T> filter(Predicate<? super T> predicate);*"张无忌", "张学友", "刘德华", "张三丰"** 选出来不是      姓张的*/
public class Test13 {public static void main(String[] args) {//Stream<String> stream = Stream.of("张无忌", "张学友", "刘德华", "张三丰");stream.filter((s)->!s.startsWith("张")).forEach(System.out::println);//
//        G:\tools\java_jdk\jdk-9.0.1\bin\java.exe "-javaagent:
//       刘德华}
}

limit  和skip这两个参数,long   count   的终结

package Test01;import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 7:49* <p>* <p>* long count​() 返回此流中的元素数。* limit   和  skip      这两个参数*/
public class Test14 {public static void main(String[] args) {//Stream<String> stream = Stream.of("张无忌", "张学友", "刘德华", "张三丰");
//        long count = stream.count();
//        System.out.println(count);//4System.out.println("-----------------------");//前三个     姓张的stream.limit(3).filter((s) -> s.startsWith("张")).forEach(System.out::println);System.out.println("-----------------------");//跳过2 个    筛选姓张的stream.skip(2).filter((s) -> s.startsWith("张")).forEach(System.out::println);//stream 只开启一次   就关闭了}
}

concat的拼接,   拼接流对象

package Test01;import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 7:56** function   接口的 apply 方法      字符串强转   数字*  R apply(T t);** concat    拼接使用**/
public class Test15 {public static void main(String[] args) {//Stream<String> stringStream = Stream.of("3", "4", "5", "6", "7");//of 长度固定
//        Stream<Integer> integerStream = stringStream.map((s) -> Integer.parseInt(s));
//        integerStream.forEach(System.out::println);// 优化如下:stringStream.map(Integer::parseInt).forEach(System.out::println);System.out.println("-----------------");//Stream<String> s1 = Stream.of("熊大", "熊二");Stream<String> s2 = Stream.of("熊大", "熊二");Stream<String> concat = Stream.concat(s1, s2);//拼接concat.forEach(System.out::println);//遍历//}
}
package Test01;import java.util.ArrayList;
import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 8:11** 1. 第一个队伍只要名字为3个字的成员姓名;   //filter* 2. 第一个队伍筛选之后只要前3个人;    //limit* 3. 第二个队伍只要姓张的成员姓名;    //filter* 4. 第二个队伍筛选之后不要前2个人;   //sip* 5. 将两个队伍合并为一个队伍;           //concat* 6. 根据姓名创建Person对象;* 7. 打印整个队伍的Person对象信息。*/
public class Test16 {public static void main(String[] args) {//ArrayList<String> list1 = new ArrayList<>();list1.add("迪丽热巴");list1.add("宋远桥");list1.add("苏星河");list1.add("老子");list1.add("庄子");list1.add("孙子");list1.add("洪七公");Stream<String> stringStream = list1.stream().filter(name -> name.length() == 3);
//        stringStream.forEach(System.out::println);stringStream.limit(3).forEach(System.out::println);System.out.println("-------------");ArrayList<String> list2 = new ArrayList<>();list2.add("古力娜扎");list2.add("张无忌");list2.add("张三丰");list2.add("赵丽颖");list2.add("张二狗");list2.add("张天爱");list2.add("张三");Stream<String> stringStream1 = list2.stream().filter(name -> name.startsWith("张"));stringStream1.skip(2).forEach(System.out::println);//筛选之后再次筛选System.out.println("-------------");Stream<String> concat = Stream.concat(stringStream, stringStream1);//调用person 的构造concat.map(Person::new).forEach(System.out::println);}
}
class Person{private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public Person() {}public Person(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}

parallel  的方法

package Test01;import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 8:39* stream 流的并发* <p>* <p>* Interface BaseStream<T,S extends BaseStream<T,S>>* <p>* 参数类型* T - 流元素的类型* S - 实现 BaseStream的流的类型     有一个parallel  方法** xxxxxxxxxxx* default Stream<E> parallelStream​() 返回可能并行的 Stream与此集合作为其来源。*/
public class Test17 {public static void main(String[] args) {//数组的并发String[] str = {"张无忌", "张学友", "刘德华", "张三丰"};Stream<String> stream = Stream.of(str);Stream<String> parallel = stream.parallel();//返回一个  回平行的等效流。parallel.forEach(System.out::println);//  输出时无序 ,说明并发执行
//        parallel.forEach((s)-> System.out.println(s));System.out.println("-------------------------");//Collection<? super String> list=new ArrayList<String>();Collections.addAll(list,"张无忌", "张学友", "刘德华", "张三丰");
//        System.out.println(list);list.parallelStream().forEach(System.out::println);//通过集合直接获取 并发流}
}

数组   获取stream  流

package Test01;import java.util.Arrays;
import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 9:19**<A> A[] toArray​(IntFunction<A[]> generator)   在stream 接口中* 指定泛型    不局限于 object  类型**/
public class Test20 {public static void main(String[] args) {//Stream<String> stringStream = Stream.of("1", "2", "3", "4");//收集到 integer 数组
//        Object[] objects = stringStream.toArray();String[] array = stringStream.toArray(String[]::new);//装到数组中for (String s : array) {System.out.println(Integer.parseInt(s)+1); //增加1}}
}

collectors  的方法,toList      toMap    toSet

package Test01;import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @auther SyntacticSugar* @data 2018/9/3 0003下午 8:55* 收集流的使用    会关闭stream* <p>* Interface Collector<T,A,R>* <p>* 参数类型* T - 还原操作的输入元素的类型* A - 缩减操作的可变累积类型(通常作为实现细节隐藏)* R - 缩小操作的结果类型* <p>* ------------ collectors   中的方法    toList()  toMap()  toSet()* Object[] toArray​() 返回一个包含此流的元素的数组。*/
public class Test18 {public static void main(String[] args) {//Stream<String> stringStream = Stream.of("熊大", "熊二", "光头强");List<String> list = stringStream.collect(Collectors.toList());//收集到list集合
//        Set<String> set = stringStream.collect(Collectors.toSet());//收集到 set集合
//        String[] strings = stringStream.toArray(String[]::new);//收集到数组中
//        Object[] array = stringStream.toArray();//收集到无参数组中//
//        list.forEach(System.out::println);//收集流方法调用以后  stream就被关闭了
//        set.forEach(System.out::println);//收集流方法调用以后  stream就被关闭了//收集流方法调用以后  stream就被关闭了for (String s : list) {System.out.println(s);}System.out.println("-----------------------");
//        for (String s : set) {
//            System.out.println(s);
//        }}
}

stream 流的并发相关推荐

  1. CUDA 7 Stream流简化并发性

    CUDA 7 Stream流简化并发性 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams ...

  2. CUDA Stream流并发性

    目录 1.CUDA 中的异步命令 2.默认流 3.Multistream多流示例 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. ...

  3. CUDA 7流简化并发

    CUDA 7流简化并发 异构计算是指有效使用系统中的所有处理器,包括CPU和GPU.为此,应用程序必须在多个处理器上同时执行功能.CUDA应用程序通过在流(按顺序执行的命令序列)中,执行异步命令来管理 ...

  4. Cuda Stream流 分析

    Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: • Kernel level • Grid level Stream和event简介 Cuda stre ...

  5. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  6. 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties

    文章目录 1.lambda表达式标准语法:()->{} 2.lambda表达式简略语法:可推导即可省略 3.lambda表达式原理:lambda效率比匿名内部类高 4.两个函数式接口:Consu ...

  7. List增删元素后size大小发生变化带来的影响、Stream流操作、Lambda表达式

    目录 List增删元素后size大小发生变化带来的影响 List的几种遍历方式 报异常原因 增强for循环原理 异常原理 建议删除操作 性能对比 Stream流操作 Lambda表达式 语法 Lamb ...

  8. 【Stream】java8新特性Stream流总结

    一.什么是stream 在 java8 中增加了一个新的抽象接口 Stream API,使用 Stream 操作集合类似于使用 SQL 语句数据库查找数据类似,提供直观的方法进行操作. Stream ...

  9. Stream流和Optional

    Lambda表达式和函数式接口 https://blog.csdn.net/qq_45888932/article/details/122451124 目录 一.什么是Stream流 注意事项 二.快 ...

最新文章

  1. [skill] vim 操作多个window
  2. cvtColor不是cv的成员
  3. 【英语学习】【Daily English】U12 E-World L03 Black Friday is coming!
  4. 开始驻扎博客园,分享技术、学习心得与人生感悟,与大家一起成长
  5. python列表操作符_Python中list()列表操作符的案例分享
  6. FD.io——助你创新更高效、更灵活的报文处理方案
  7. 动易cms5.0如何安装在远程服务器上,动易PowerEasy_SiteWeaver_CMS6.8安装教程
  8. 计算机考研具体学科准备
  9. KND数控系统PLC开发环境
  10. 八种抽样技术的科学指南
  11. linux apache 查看mpm 配置方式,Apache Prefork、Worker和Event三种MPM详解
  12. mysql重复查询最后一条数据_sql查询表里重复记录现取重复最后一条记录方法
  13. 视觉SLAM十四讲学习笔记——第十三讲 实践:设计SLAM系统
  14. vmware-vmx.exe无法结束进程, 关闭Hyper-v虚拟服务
  15. QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面
  16. 1、字符串与数字相互转换
  17. JS获取DIV动态高度,并赋值到其style样式中
  18. centos(11)-ps进程管理
  19. 统计学习导论(ISLR)(三):线性回归(超详细介绍)
  20. 微型计算机实验仪,微型计算机实验仪

热门文章

  1. 记录问题处理----进程注入导致文本文档报“无法定位序数345于动态链接库comctl32.dll上”的问题
  2. 腾讯云服务器自动断开连接的解决办法
  3. 玲听2021区块链跨年演讲丨微软大中华区副总裁邓贇:区块链助力产业互联
  4. 是什么I18N/L10N ?
  5. EEROR:Windows named pipe error: The system cannot find the file specified. (code:2)
  6. 学生成绩管理程序(C语言版)
  7. 计算机应该注意的一些点
  8. 论文阅读汇总(1)-【篇数:50】
  9. 【转载】scp用法及not a regular file报错解决
  10. 【Sketchnotes】Machine Learning for Beginners 初学者机器学习