当前位置: 首页 > news >正文

百度网站推广咨询上街区网站建设

百度网站推广咨询,上街区网站建设,建筑设计院分公司加盟,北京单页营销型网站制作目录什么是Stream#xff1f;怎么创建Stream?Stream的中间操作Stream的终端操作什么是Stream#xff1f; Stream它并不是一个容器#xff0c;它只是对容器的功能进行了增强#xff0c;添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两… 目录什么是Stream怎么创建Stream?Stream的中间操作Stream的终端操作什么是Stream Stream它并不是一个容器它只是对容器的功能进行了增强添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两种执行模式并行模式充分的利用了多核处理器的优势使用fork/join框架进行了任务拆分同时提高了执行速度。简而言之Stream就是提供了一种高效且易于使用的处理数据的方式。 特点Stream自己不会存储元素。Stream的操作不会改变源对象。相反他们会返回一个持有结果的新Stream。Stream 操作是延迟执行的。它会等到需要结果的时候才执行。也就是执行终端操作的时候。 一个Stream的操作就如上图在一个管道内分为三个步骤第一步是创建Stream从集合、数组中获取一个流第二步是中间操作链对数据进行处理。第三步是终端操作用来执行中间操作链返回结果。 怎么创建Stream? 由集合创建 Java8 中的 Collection 接口被扩展提供了两个获取流的方法,这两个方法是default方法也就是说所有实现Collection接口的接口都不需要实现就可以直接使用 default Stream stream() : 返回一个顺序流。 default Stream parallelStream() : 返回一个并行流。 例如 ListInteger integerList new ArrayList();integerList.add(1);integerList.add(2);StreamInteger stream integerList.stream();StreamInteger stream1 integerList.parallelStream();由数组创建 Java8 中的 Arrays 的静态方法 stream() 可以获取数组流: static Stream stream(T[] array): 返回一个流 重载形式能够处理对应基本类型的数组: public static IntStream stream(int[] array) public static LongStream stream(long[] array) public static DoubleStream stream(double[] array) int[] intArray {1,2,3}; IntStream stream Arrays.stream(intArray);由值创建: 可以使用静态方法 Stream.of(), 通过显示值 创建一个流。它可以接收任意数量的参数。 public static Stream of(T… values) : 返回一个流。 StreamInteger integerStream Stream.of(1, 2, 3, 4, 5, 6, 7, 8);可以使用静态方法 Stream.iterate() 和 Stream.generate()创建无限流。 迭代 public static Stream iterate(final T seed, final UnaryOperator f) 生成 public static Stream generate(Supplier s) Stream.generate(Math::random).limit(5).forEach(System.out::print); ListInteger collect Stream.iterate(0,i - i 1).limit(5).collect(Collectors.toList());注意使用无限流一定要配合limit截断不然会无限制创建下去。 Stream的中间操作 如果Stream只有中间操作是不会执行的当执行终端操作的时候才会执行中间操作这种方式称为延迟加载或惰性求值。多个中间操作组成一个中间操作链只有当执行终端操作的时候才会执行一遍中间操作链具体是因为什么我们在后面再说明。下面看下Stream有哪些中间操作。 Stream distinct() 去重通过流所生成元素的 hashCode() 和 equals() 去除重复元素。 Stream filter(Predicate? super T predicate): Predicate函数它是断言型接口所以filter方法中是接收一个和Predicate函数对应Lambda表达式返回一个布尔值从流中过滤某些元素。 Stream sorted(Comparator? super T comparator): 指定比较规则进行排序。 Stream limit(long maxSize): 截断流使其元素不超过给定数量。如果元素的个数小于maxSize那就获取所有元素。 Stream skip(long n): Stream map(Function? super T, ? extends R mapper) 接收一个Function函数作为参数该函数会被应用到每个元素上并将其映射成一个新的元素。也就是转换操作map还有三个应用于具体类型方法分别是mapToIntmapToLong和mapToDouble。这三个方法也比较好理解比如mapToInt就是把原始Stream转换成一个新的Stream这个新生成的Stream中的元素都是int类型。这三个方法可以免除自动装箱/拆箱的额外消耗。 Stream flatMap(Function? super T, ? extends Stream? extends R mapper) 接收一个Function函数作为参数将流中的每个值都转换成另一个流然后把所有流连接成一个流。flatMap也有三个应用于具体类型的方法分别是flatMapToInt、flatMapToLong、flatMapToDouble其作用于map的三个衍生方法相同。 Stream的终端操作 终端操作执行中间操作链并返回结果。终端操作我们就不一一介绍了只介绍一下常用的操作。详细可看java.util.stream.Stream接口中的方法。 void forEach(Consumer? super T action): -内部迭代(需要用户去做迭代称为外部迭代。相反Stream API使用内部迭代帮你把迭代做了) users.stream().forEach(user - System.out.println(user.getName()));R, A R collect(Collector? super T, A, R collector): 收集、将流转换为其他形式比如转换成List、Set、Map。collect方法是用Collector作为参数Collector接口中方法的实现决定了如何对流执行收集操作(如收集到 List、Set、Map)。但是 Collectors 实用类提供了很多静态方法可以方便地创建常见收集器实例。例举一些常用的 ListUser users Lists.newArrayList();users.add(new User(15, A, ImmutableList.of(1元, 5元)));users.add(new User(25, B, ImmutableList.of(10元, 50元)));users.add(new User(21, C, ImmutableList.of(100元)));//收集名称到ListListString nameList users.stream().map(User::getName).collect(Collectors.toList());//收集名称到ListSetString nameSet users.stream().map(User::getName).collect(Collectors.toSet());//收集到map,名字作为key,user对象作为valueMapString, User userMap users.stream().collect(Collectors.toMap(User::getName, Function.identity(), (k1, k2) - k2));其他终端操作 boolean allMatch(Predicate? super T predicate); 检查是否匹配所有元素。boolean anyMatch(Predicate? super T predicate); 检查是否至少匹配一个元素。boolean noneMatch(Predicate? super T predicate); 检查是否没有匹配所有元素。Optional findFirst(); 返回当前流中的第一个元素。Optional findAny(); 返回当前流中的任意元素。long count(); 返回流中元素总数。Optional max(Comparator? super T comparator); 返回流中最大值。Optional min(Comparator? super T comparator); 返回流中最小值。T reduce(T identity, BinaryOperator accumulator); 可以将流中元素反复结合起来得到一个值。 返回 T。这是一个归约操作。
http://www.zqtcl.cn/news/356589/

相关文章:

  • dede网站地图修改厦门百度seo
  • 可以做行程的网站网站详情怎么做的
  • 网站建设心得8000字营销型网站建设的注意事项
  • 织梦购物网站整站源码哈尔滨网站建设技术托管
  • 做推广的网站微信号企业免费网站制作
  • 做旅游网站的引言上海公司网站建设哪家好
  • 找项目去哪个网站网站建设一条龙全包
  • 网站 数据库 模板网站系统建设合作合同范本
  • 网站空间租赁费用企业网站建设需要多少钱知乎
  • 免费建网站哪个模板多浅谈学校网站建设
  • 精致的个人网站手机网站建设基本流程图
  • 优秀网站网页设计图片主机屋做网站视频
  • 安徽网站建设电话编程一个最简单游戏代码
  • 西宁圆井模板我自己做的网站在线平面设计图
  • 浦口区网站建设技术指导做软件需要网站吗
  • 丹东有做公司网站的吗搜索引擎 wordpress
  • 做网站代理国内课程网站建设现状
  • 中国建设银行手机网站下载从零开始建设企业网站
  • 网站友情链接怎么弄seo平台
  • 建设网站一定要备案吗嘉兴做网站设计
  • 如何制作营销网站模板做外贸需要关注的网站有什么好处
  • 东莞勒流网站制作wordpress 自定义字段 查询
  • 温州网站开发风格做影视剧组演员垂直平台网站
  • c 网站开发培训怎么做网站的站点地图
  • html 网站模板简单网站制作北京海淀
  • 大庆做网站找谁珠海网站搭建
  • 网站建设方面的外文宿迁房产网找房
  • 运营 网站遵义网站开发制作公司
  • 动力论坛源码网站后台地址是什么网站上微信支付功能
  • 网站需求分析模板深圳3d制作