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

做企业网站服务器在国外文案代写平台

做企业网站服务器在国外,文案代写平台,交流平台网站架构怎么做,安徽网站建设制作什么是Stream流 Stream流是 Java8 引入的一个的新的API,用于以声明式编程风格高效处理集合、数组或I/O资源等数据。通过链式操作的方式对数据进行计算,最终产生结果。 为什么要引入Stream流API 我们在使用Stream流之前操作集合的时候,可能会…

什么是Stream流

        Stream流是 Java8 引入的一个的新的API,用于以声明式编程风格高效处理集合、数组或I/O资源等数据。通过链式操作的方式对数据进行计算,最终产生结果。

为什么要引入Stream流API

        我们在使用Stream流之前操作集合的时候,可能会存在部分逻辑导致多层循环嵌套,这样会导致代码的可读性变差、代码冗余度变高。同时,如果逻辑中存在需要进行并行计算的地方,并行的复杂度比较大,手动去管理多线程可能会出现问题。

        因此,Java8引入了Stream流这个API,用于简化传统的集合操作,通过声明式编程范式和函数式编程思想快速进行数据集合的处理。

题外话:声明式编程和命令式编程

  • 命令式编程的核心思想在于开发者通过编写具体的步骤指令告诉计算机该如何做。

  • 声明式编程的核心思想在于开发者通过描述做什么,而非具体步骤,让底层框架自动处理如何做。

        命令式编程关注于控制流程、强调状态的变化,而声明式编程的重点关注于结果目标而不在乎中间细节,强调没有副作用。Stream流就是声明式编程的典型示例,抽象层级高,通过组合操作处理数据流,代码简洁,可维护性强。


如何创建Stream流

一、从集合创建

        通过 Collection.steram() 或 Collection.parallelStream() 创建顺序流或者并行流。

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();       // 顺序流
Stream<String> parallelStream = list.parallelStream(); // 并行流

二、从数组创建

        通过 Arrays.stream(T[] arr) 创建数组的stream流。

String[] array = {"Java", "Stream", "API"};
Stream<String> stream = Arrays.stream(array);// 处理原始类型数组(避免装箱)
int[] intArray = {1, 2, 3};
IntStream intStream = Arrays.stream(intArray);

三、直接用数据创建

        通过 Stream.of(T... values)。

Stream<String> stream = Stream.of("A", "B", "C");
Stream<Integer> numberStream = Stream.of(1, 2, 3);

四、生成连续数据序列流

// 生成1~5(不包含5)的整数流
IntStream.range(1, 5).forEach(System.out::print);  // 输出:1234// 生成1~5(包含5)的整数流
IntStream.rangeClosed(1, 5).forEach(System.out::print); // 输出:12345

Stream流的核心操作

        Stream流的核心操作分为中间操作和终端操作,下面进行分别介绍。

一、中间操作

过滤(Filter)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evens = numbers.stream().filter(n -> n % 2 == 0)  // 过滤偶数.collect(Collectors.toList());  // [2,4]

映射(Map)

List<String> words = Arrays.asList("apple", "banana");
List<Integer> lengths = words.stream().map(String::length)  // 映射为单词长度.collect(Collectors.toList());  // [5, 6]

扁平化映射(FlatMap)

List<List<String>> nestedList = Arrays.asList(Arrays.asList("a", "b"), Arrays.asList("c", "d")
);
List<String> flatList = nestedList.stream().flatMap(Collection::stream)  // 展开为 "a","b","c","d".collect(Collectors.toList());

去重(Distinct)

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3);
List<Integer> unique = numbers.stream().distinct().collect(Collectors.toList());  // [1,2,3]

排序(Sorted)

List<String> names = Arrays.asList("Bob", "Alice", "Charlie");
List<String> sorted = names.stream().sorted()  // 自然排序:["Alice", "Bob", "Charlie"].collect(Collectors.toList());

分页(Limit)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = numbers.stream().skip(2)  // 跳过前2个元素:[3,4,5].limit(2) // 取前2个元素:[3,4].collect(Collectors.toList());

二、终端操作

遍历(ForEach)

List<String> names = Arrays.asList("Alice", "Bob");
names.stream().forEach(System.out::println);  // 输出每个名字

收集(Collect)

// 转为List/Set
List<Integer> list = stream.collect(Collectors.toList());
Set<Integer> set = stream.collect(Collectors.toSet());// 转为Map
Map<Integer, String> map = users.stream().collect(Collectors.toMap(User::getId, User::getName));// 分组统计
Map<String, List<User>> groupByCity = users.stream().collect(Collectors.groupingBy(User::getCity));// 拼接字符串
String joined = stream.collect(Collectors.joining(", "));

归约(Reduce)

int sum = numbers.stream().reduce(0, Integer::sum);  // 初始值0,累加所有元素Optional<Integer> max = numbers.stream().reduce(Integer::max);  // 无初始值,返回Optional

匹配(Match)

boolean hasEven = numbers.stream().anyMatch(n -> n % 2 == 0);  // 是否存在偶数
boolean allPositive = numbers.stream().allMatch(n -> n > 0);   // 是否全为正数

查找(Find)

Optional<Integer> first = numbers.stream().findFirst();
Optional<Integer> any = numbers.parallelStream().findAny();  // 并行时可能随机返回

统计(Count/Min/Max)

long count = numbers.stream().count();
Optional<Integer> min = numbers.stream().min(Integer::compareTo);
Optional<Integer> max = numbers.stream().max(Integer::compareTo);

Stream流高级特性

并行

        Stream的并行流底层基于Fork/Join框架,自动拆分任务到线程池中,可以进行并行计算。下面列出一个表格用于标识顺序流和并行流在一些场景下的性能对比,表格来源网络。

场景

数据量

顺序流耗时

并行流耗时

加速比

简单过滤+统计

10万

12 ms

8 ms

1.5x

复杂计算(如加密)

10万

350 ms

85 ms

4.1x

排序操作

10万

45 ms

60 ms

0.75x

        我们应该根据情况合理选用不同的流:当数据量小且操作简单的时候,我们应该优先选择顺序流;当数据量较大且操作复杂的时候,我们应该选用并行流。


总结

        Java为我们提供了一种新的操作集合的方法,通过Stream流可以简化我们的编码,让我们代码的可读性和可维护性得到提升;同时,对于一些特殊情况下,Stream流也可以加快我们的计算速度。根据实际场景,选用适合的操作。

http://www.dtcms.com/wzjs/187587.html

相关文章:

  • 广州站电话自媒体代运营
  • 保定网站制作价格淘宝店铺怎么推广
  • 柳州做网站去哪家公司好seo排名系统
  • 网站仿做软件网站域名查询系统
  • 塘沽做网站的公司网站seo策划方案案例分析
  • 温州纪委作风建设网站外贸推广具体是做什么
  • 静态网站设计南京疫情最新消息
  • 加强住房公积金网站建设四川seo技术培训
  • 迅速建设企业网站关键词优化seo外包
  • 黄骅做网站_黄骅昊信科技|黄骅网站|黄骅网站开发|黄骅微信|黄骅seo外链工具源码
  • 微信网站的链接标志图片如何做促销活动推广方法有哪些
  • 网站倒计时代码优化近义词
  • 专业做传奇网站解析南宁seo服务公司
  • 高端网站制作平台百度搜索引擎推广
  • 如何选择宜昌网站建设沧州seo包年优化软件排名
  • 网上购物网站大全收录查询 站长工具
  • 一个域名做两个网站可以么深圳网站建设的公司
  • 免费炫酷网站模板seo超级外链工具
  • 云南网站做的好的公司哪家好新闻类软文营销案例
  • 专门做会议的网站手机百度浏览器
  • 青岛做物流网站淘宝网店代运营正规公司
  • 公安备案网站首页企业宣传文案
  • 公司网站百度小程序开发重庆seo整站优化设置
  • dedecms手机网站制作如何做友情链接
  • 安装网站到服务器怎样申请网站
  • 新乡网站制作接广告的平台
  • 网站功能优化的方法网络营销的流程和方法
  • 湛江做网站的网站京津冀协同发展
  • 如何做电影网站赚钱吗人工智能培训师
  • 做维修广告效最好是哪个网站吗优化大师免安装版