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

学院网站建设的特色营销型网站和传统网站区别

学院网站建设的特色,营销型网站和传统网站区别,网站开发经验与教训,有网站开发专业吗引言 Java 8引入了许多新特性,其中最为显著的莫过于Lambda表达式和Stream API。Stream API提供了一种高效、简洁的方法来处理集合数据,使代码更加简洁明了,且具有较高的可读性和可维护性。本文将深入探讨Java Stream API的使用,包…

引言

Java 8引入了许多新特性,其中最为显著的莫过于Lambda表达式和Stream API。Stream API提供了一种高效、简洁的方法来处理集合数据,使代码更加简洁明了,且具有较高的可读性和可维护性。本文将深入探讨Java Stream API的使用,包括基础概念、常用操作、并行处理、实战案例以及最佳实践等内容。

目录

  1. 什么是Stream API
  2. Stream API的基础操作
    • 创建Stream
    • 中间操作
    • 终端操作
  3. Stream API的高级操作
    • 排序
    • 筛选
    • 映射
    • 规约
    • 收集
  4. 并行Stream
  5. Stream API实战案例
    • 处理集合数据
    • 文件操作
    • 数据库操作
  6. Stream API的最佳实践
  7. 常见问题与解决方案
  8. 总结

什么是Stream API

Stream API是Java 8引入的一种用于处理集合数据的抽象,它允许以声明性方式(类似SQL语句)来处理数据。Stream API提供了许多强大的操作,可以用来对集合进行过滤、排序、映射、规约等操作,极大地简化了代码。

特点

  • 声明性编程:使用Stream API可以以声明性的方式编写代码,减少样板代码。
  • 链式调用:Stream API的操作可以链式调用,提高代码的可读性。
  • 惰性求值:中间操作是惰性求值的,只有在执行终端操作时才会进行计算。
  • 并行处理:支持并行处理,可以充分利用多核CPU的优势。

Stream API的基础操作

创建Stream

Stream API提供了多种方式来创建Stream,常见的有以下几种:

  1. 从集合创建
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
  1. 从数组创建
String[] array = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);
  1. 使用Stream.of
Stream<String> stream = Stream.of("a", "b", "c");
  1. 使用Stream.generate
Stream<Double> stream = Stream.generate(Math::random).limit(10);
  1. 使用Stream.iterate
Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(10);

中间操作

中间操作用于转换Stream,是惰性求值的,常见的中间操作有以下几种:

  1. filter:用于过滤元素。
Stream<String> stream = list.stream().filter(s -> s.startsWith("a"));
  1. map:用于映射每个元素到对应的结果。
Stream<String> stream = list.stream().map(String::toUpperCase);
  1. flatMap:用于将每个元素转换为Stream,然后合并成一个Stream。
Stream<String> stream = list.stream().flatMap(s -> Stream.of(s.split("")));
  1. distinct:用于去重。
Stream<String> stream = list.stream().distinct();
  1. sorted:用于排序。
Stream<String> stream = list.stream().sorted();
  1. peek:用于在处理过程中查看每个元素。
Stream<String> stream = list.stream().peek(System.out::println);

终端操作

终端操作用于启动Stream的计算,并生成结果,常见的终端操作有以下几种:

  1. forEach:对每个元素执行操作。
list.stream().forEach(System.out::println);
  1. collect:将Stream转换为其他形式。
List<String> result = list.stream().collect(Collectors.toList());
  1. reduce:将Stream中的元素规约成一个值。
Optional<String> result = list.stream().reduce((s1, s2) -> s1 + s2);
  1. toArray:将Stream转换为数组。
String[] array = list.stream().toArray(String[]::new);
  1. count:计算元素个数。
long count = list.stream().count();
  1. anyMatchallMatchnoneMatch:用于匹配判断。
boolean anyMatch = list.stream().anyMatch(s -> s.startsWith("a"));
boolean allMatch = list.stream().allMatch(s -> s.startsWith("a"));
boolean noneMatch = list.stream().noneMatch(s -> s.startsWith("a"));
  1. findFirstfindAny:用于查找元素。
Optional<String> first = list.stream().findFirst();
Optional<String> any = list.stream().findAny();

Stream API的高级操作

排序

使用sorted方法对Stream进行排序,可以传入一个比较器。

List<String> list = Arrays.asList("b", "c", "a");
List<String> sortedList = list.stream().sorted().collect(Collectors.toList());
// 逆序排序
List<String> sortedListDesc = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

筛选

使用filter方法对Stream中的元素进行筛选。

List<String> list = Arrays.asList("a", "b", "c");
List<String> filteredList = list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList());

映射

使用map方法对Stream中的元素进行映射。

List<String> list = Arrays.asList("a", "b", "c");
List<String> mappedList = list.stream().map(String::toUpperCase).collect(Collectors.toList());

规约

使用reduce方法对Stream中的元素进行规约。

List<String> list = Arrays.asList("a", "b", "c");
String result = list.stream().reduce("", (s1, s2) -> s1 + s2);

收集

使用collect方法将Stream转换为其他形式。

List<String> list = Arrays.asList("a", "b", "c");
List<String> collectedList = list.stream().collect(Collectors.toList());
Set<String> collectedSet = list.stream().collect(Collectors.toSet());
String joinedString = list.stream().collect(Collectors.joining(","));

并行Stream

并行Stream可以充分利用多核CPU的优势,提高数据处理的效率。可以使用parallelStream方法创建并行Stream。

List<String> list = Arrays.asList("a", "b", "c");
List<String> parallelList = list.parallelStream().map(String::toUpperCase).collect(Collectors.toList());

也可以使用parallel方法将普通Stream转换为并行Stream。

List<String> list = Arrays.asList("a", "b", "c");
List<String> parallelList = list.stream().parallel().map(String::toUpperCase).collect(Collectors.toList());

需要注意的是,并行Stream并不是总是比串行Stream更快,具体需要根据具体情况进行测试。

Stream API实战案例

处理集合数据

案例一:过滤并转换集合

给定一个包含若干字符串的集合,过滤掉长度小于3的字符串,并将剩余字符串转换为大写。

List<String> list = Arrays.asList("a", "ab", "abc", "abcd");
List<String> result = list.stream().filter(s -> s.length() >= 3).map(String::toUpperCase).collect(Collectors.toList());
System.out.println(result); // 输出:[ABC, ABCD]
案例二:计算平均值

给定一个包含若干整数的集合,计算所有整数的平均值。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
OptionalDouble average = list.stream().mapToInt(Integer::intValue).average();
average.ifPresent(System.out::println); // 输出:3.0

文件操作

案例三:读取文件内容

使用Stream API

读取文件内容并输出到控制台。

try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {lines.forEach(System.out::println);
} catch (IOException e) {e.printStackTrace();
}
案例四:统计单词出现次数

读取文件内容并统计每个单词出现的次数。

try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {Map<String, Long> wordCount = lines.flatMap(line -> Arrays.stream(line.split("\\W+"))).collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));wordCount.forEach((word, count) -> System.out.println(word + ": " + count));
} catch (IOException e) {e.printStackTrace();
}

数据库操作

案例五:处理数据库查询结果

假设我们有一个数据库表users,包含字段idnameage。我们可以使用Stream API处理查询结果。

List<User> users = queryDatabase();
List<String> names = users.stream().filter(user -> user.getAge() > 18).map(User::getName).collect(Collectors.toList());
System.out.println(names);

Stream API的最佳实践

  1. 避免不必要的并行化:并行Stream并不是总是更快,应该根据具体情况进行选择。
  2. 合理使用中间操作和终端操作:中间操作是惰性求值的,只有在执行终端操作时才会进行计算。
  3. 注意Stream的可复用性:Stream一旦被消费就不能再使用,如果需要复用,可以考虑将Stream转换为集合再使用。
  4. 使用合适的收集器Collectors类提供了多种收集器,可以根据具体需求选择合适的收集器。
  5. 处理异常:在使用Stream API时,需要处理可能出现的异常,尤其是在文件操作和数据库操作中。

常见问题与解决方案

Stream已关闭

Stream一旦被消费就不能再使用,如果需要复用,可以考虑将Stream转换为集合再使用。

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
stream.forEach(System.out::println); // 会抛出IllegalStateException

性能问题

并行Stream并不是总是比串行Stream更快,具体需要根据具体情况进行测试。可以使用ForkJoinPool来优化并行Stream的性能。

ForkJoinPool customThreadPool = new ForkJoinPool(4);
customThreadPool.submit(() ->list.parallelStream().forEach(System.out::println)
).get();

内存泄漏

在使用Stream API处理大数据量时,需要注意内存泄漏的问题。可以使用close方法关闭Stream,或者使用try-with-resources语句自动关闭Stream。

try (Stream<String> lines = Files.lines(Paths.get("example.txt"))) {lines.forEach(System.out::println);
} catch (IOException e) {e.printStackTrace();
}

总结

本文详细介绍了Java Stream API的使用,包括基础操作、高级操作、并行处理、实战案例以及最佳实践等内容。通过合理利用Stream API,开发者可以大大简化代码,提高代码的可读性和可维护性,同时还可以提高数据处理的效率。希望本文对你在Java开发中的Stream API使用有所帮助。

Java Stream API是处理集合数据的强大工具,通过灵活运用各种操作,可以实现高效的数据处理和流式计算。如果你还没有使用过Stream API,建议尽快学习和掌握这一强大的工具,将其应用到你的项目中,提升开发效率和代码质量。

http://www.yayakq.cn/news/400261/

相关文章:

  • ftp给网站做备份wordpress手机号注册
  • 网站整套模板psd成品网站免费网站下载
  • 平顶山市住房和城乡建设局网站网络营销产品的首选产品
  • 建设网站的分析报告wordpress 增加阅读量
  • 怎样用jsp做网站登录网站建设与管理专业就业方向
  • 哪个网站可以做司考题全国工商企业查询系统官网
  • 电脑网站设计公司广东省一流高职院校建设专题网站
  • 青岛网站建设seo优化百度推广交了钱不给做网站
  • 和京东一样做电子产品的网站网站到期怎么办
  • 做网店好还是网站好门户网站要求
  • 哪个网站可以改字体邙山网站建设
  • wordpress 测速惠州网站关键字优化
  • wordpress 千易网盘如何做网站seo诊断
  • 凡科网站能在百度做推广吗长春网站优化体验
  • 中国热门网站外管局网站上做存量权益登记
  • 建设一个小说网站多少钱重庆网站建设坤思特
  • 域名可以做网站名吗门户网站建设价格
  • 婚庆网站大全WordPress单栏二次元主题
  • 内蒙古自治区住房和城乡建设部网站网站建设服务费入
  • 企业网站托管有必要吗特种设备作业人员证查询
  • html5做手机网站建设php网站开发结构说明
  • 成都制作网站公司简介自己能搞定吗?
  • 网站成本费用我需要把网站做
  • 下沙建设局网站域名解析ip
  • 渭南市建网站深圳光明区最新消息
  • 百度关键词分析慈溪seo排名
  • 二手房网站谁做的更好产品设计公司介绍
  • 芜湖做网站设计的公司在线logo生成器标智客
  • 怎么判断网站有没有做百度商桥网站开发人员薪酬
  • 男生女生做羞羞事的网站网站服务器租用多少钱才合理呢