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

网站建设php带数据库模板班级网站建设心得体会范文

网站建设php带数据库模板,班级网站建设心得体会范文,网站建设百度云资源,百度入驻商家JAVA8的新特性——Stream 在这个深夜写下这篇笔记#xff0c;窗外很安静#xff0c;耳机里是《季节更替》#xff0c;我感触还不是很多#xff0c;当我选择封面图片的时候才发现我们已经渐渐远去#xff0c;我们都已经奔赴生活#xff0c;都在拼命想着去换一个活法#…JAVA8的新特性——Stream 在这个深夜写下这篇笔记窗外很安静耳机里是《季节更替》我感触还不是很多当我选择封面图片的时候才发现我们已经渐渐远去我们都已经奔赴生活都在拼命想着去换一个活法六月就要真的结束这段关系好怀念校园的那段日子我们不用去思考以后在这个象牙塔里幻想一份感情互相玩笑走出来了就真的远去愿我们所得皆所愿不被生活磨平了棱角聪哥腿哥伟哥吕子帆子还有此刻读到文章的你加油我们一起向前冲 ——2023年5月15日凌晨 IT小辉同学 Java 8中引入的Stream是一种全新的数据处理方式它使用简单而高效的方法对集合数据进行操作。下面对Stream进行详细介绍 什么是 Stream(引用菜鸟教程) Stream流是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象形成一个队列。 Java中的Stream并不会存储元素而是按需计算。数据源 流的来源。 可以是集合数组I/O channel 产生器generator 等。聚合操作 类似SQL语句一样的操作 比如filter, map, reduce, find, match, sorted等。 和以前的Collection操作不同 Stream操作还有两个基础的特征 Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道 如同流式风格fluent style。 这样做可以对操作进行优化 比如延迟执行(laziness)和短路( short-circuiting)。内部迭代 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代 这叫做外部迭代。 Stream提供了内部迭代的方式 通过访问者模式(Visitor)实现 Stream的用法 Stream是Java 8中针对集合数据的一种新的操作方式使用了类似于SQL语句的流式操作方式。Stream由三部分构成源、零个或多个中间操作、终止操作。 源是指Stream要处理的原始数据源可以是Collection、Array、I/O资源等 中间操作用来对数据进行转化、过滤、排序等操作其中每一个中间操作都会返回一个新的Stream对象 终止操作用来获取Stream处理结果。 Stream的特点 1流式操作Stream提供了一种流式的操作方式方便数据处理和转换 2惰性求值Stream使用惰性求值方式进行计算只有在被终止操作时才会进行计算 3并行处理Stream支持并行处理提高了处理大数据集的效率。 Stream的优缺点 优点 1简洁使用Stream可以让代码更加简洁易懂 2高效Stream支持惰性求值和并发处理提高了处理效率 3灵活Stream提供了多种操作方式可以适应不同的数据处理需求。 缺点 1学习成本Stream需要掌握一些新的操作方式需要一定的学习成本 2线程安全并行处理时需要注意线程安全问题。 Stream的使用场景 Stream适用于处理大数据集和需要频繁进行转换、过滤、排序等操作的场景。例如对于需要筛选和排序的订单列表或者用户列表等数据集合Stream可以极大地提高处理效率和代码简洁度。 Stream的发展趋势 随着Java生态系统的不断发展Stream也在不断完善和优化中。未来Stream可能会增加更多的功能和特性同时也会进一步提升处理效率和优化用户体验。 总之Stream是Java 8中非常重要的一个新特性它为集合数据的处理提供了一种全新的方式具有很多优点和适用场景。因此熟练掌握Stream的各种用法和特点对Java开发者来说是非常重要的。 Java生成Stream Java中可以通过多种方式来生成Stream包括 从集合中生成Stream 可以使用Collection接口提供的stream()方法或parallelStream()方法来生成Stream对象。例如 ListString list Arrays.asList(apple, banana, orange); StreamString stream list.stream();从数组中生成Stream 可以使用Arrays类提供的stream()方法或parallelStream()方法来生成Stream对象。例如 int[] arr new int[]{1, 2, 3, 4, 5}; IntStream stream Arrays.stream(arr);使用Stream.of()方法生成Stream 可以使用Stream类提供的of()方法来生成Stream对象。例如 StreamInteger stream Stream.of(1, 2, 3, 4, 5);使用Stream.iterate()方法生成Stream 可以使用Stream类提供的iterate()方法来生成Stream对象。该方法需要传入一个初始值和一个函数接口用来生成无限长度的Stream。例如 StreamInteger stream Stream.iterate(1, n - n 1);使用Stream.generate()方法生成Stream 可以使用Stream类提供的generate()方法来生成Stream对象。该方法需要传入一个函数接口用来生成无限长度的Stream。例如 StreamDouble stream Stream.generate(Math::random);总之Java中可以通过多种方式来生成Stream对象可以根据不同的需求选择不同的方式来生成Stream。 Stream中的filter过滤 filter()方法可以用于过滤出满足特定条件的元素。 具体来说filter()方法会接收一个函数式接口PredicateT,该接口只有一个方法test(T t),该方法接受一个参数t,返回一个布尔值。当test()方法的返回值为true时表示当前元素应该被保留当返回值为false时表示当前元素应该被过滤掉。 /*** Description 过滤掉apple这个字符串* Author IT小辉同学* Date 2023/05/14*/Testpublic void test1() {ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();//过滤掉apple这个字符串ListString stringList stream.filter(s - !s.equals(apple)).collect(Collectors.toList());System.out.println(过滤掉apple这个字符串:stringList);}/*** Description 过滤掉含字母a的字符串* Author IT小辉同学* Date 2023/05/14*/Testpublic void test2() {ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();//过滤掉含字母a的字符串ListString stringList1stream.filter(s - !s.contains(a)).collect(Collectors.toList());System.out.println(过滤掉含字母a的字符串:stringList1);}/*** Description 过滤掉含字母a和i的字符串* Author IT小辉同学* Date 2023/05/14*/Testpublic void test3() {ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();//过滤掉含字母a和i的字符串ListString stringList1stream.filter(s - !s.contains(a)!s.contains(i)).collect(Collectors.toList());System.out.println(过滤掉含字母a和i的字符串:stringList1);} 注意同一个Stream不可进行多次操作否则报错 错误示例 ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();//过滤掉apple这个字符串ListString stringList stream.filter(s - !s.equals(apple)).collect(Collectors.toList());System.out.println(过滤掉apple这个字符串:stringList);//过滤掉含字母a和i的字符串ListString stringList1stream.filter(s - !s.contains(a)!s.contains(i)).collect(Collectors.toList());System.out.println(过滤掉含字母a和i的字符串:stringList1);报错情况 Exception in thread main java.lang.IllegalStateException: stream has already been operated upon or closedat java.util.stream.AbstractPipeline.init(AbstractPipeline.java:203)at java.util.stream.ReferencePipeline.init(ReferencePipeline.java:94)at java.util.stream.ReferencePipeline$StatelessOp.init(ReferencePipeline.java:618)at java.util.stream.ReferencePipeline$2.init(ReferencePipeline.java:163)at java.util.stream.ReferencePipeline.filter(ReferencePipeline.java:162)at com.demo.example.StreamDemo.main(StreamDemo.java:20)什么原因详细解释 这个异常通常是因为对一个已经被操作或关闭的Stream进行了再次操作或关闭导致Stream状态不正确从而抛出IllegalStateException异常。解决这个问题的方法通常有以下几种 避免在同一个Stream上进行多个终止操作 即使多个终止操作被串联在一起也只会执行最后一个终止操作。因此在一个Stream对象上执行多个终止操作会导致Stream被关闭从而引发IllegalStateException异常。如果需要对同一个Stream进行多个操作可以将其保存到一个中间变量中并对该中间变量进行操作。例如 StreamString stream list.stream(); stream stream.filter(s - s.length() 5); stream.forEach(System.out::println);使用新建的Stream对象进行操作 对于Stream对象的所有操作都会返回一个新的Stream对象因此可以通过使用新建的Stream对象来避免对已经被操作或关闭的Stream进行操作。例如 StreamString stream1 list.stream(); StreamString stream2 stream1.filter(s - s.length() 5); stream2.forEach(System.out::println);改用Stream.peek()方法 peek()方法是一种类似于forEach()方法但不会关闭Stream的中间操作。可以通过使用peek()方法来进行调试和测试操作。例如 StreamString stream list.stream(); stream stream.filter(s - s.length() 5).peek(System.out::println); stream.forEach(System.out::println);总之如果出现了IllegalStateException异常通常是因为对一个已经被操作或关闭的Stream进行了再次操作或关闭。可以通过避免在同一个Stream对象上进行多个终止操作、使用新建的Stream对象进行操作或改用Stream.peek()方法来解决这个问题。 Stream中的forEach遍历 forEach()方法是一种用于遍历Stream元素并对每个元素进行指定操作的终止操作方法。 forEach()方法接收一个Lambda表达式作为参数该表达式会被应用到Stream中的每个元素上用来执行指定的操作。该方法不返回任何值只是将Lambda表达式应用到Stream中的每个元素上从而实现对Stream的遍历操作。 /*** Description 简单遍历* Author IT小辉同学* Date 2023/05/15*/Testpublic void test4(){ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();stream.forEach(System.out::println);}/*** Description 遍历去除含有字母b的字符串* Author IT小辉同学* Date 2023/05/15*/Testpublic void test5(){ListString list Arrays.asList(apple, banana, orange,cherry,Hami);StreamString stream list.stream();stream.filter(s - !s.contains(b)).forEach(System.out::println);}/*** Description 遍历去除含有字母b和i的字符串并且添加到arrayList* Author IT小辉同学* Date 2023/05/15*/Testpublic void test6(){ListString list Arrays.asList(apple, banana, orange,cherry,Hami);ArrayListString arrayListnew ArrayList();StreamString stream list.stream();stream.filter(s - !s.contains(b)).forEach(arrayList::add);System.out.println(arrayList);}Stream中的map映射 map操作可以将Stream中的每个元素映射到另一个元素上并返回一个新的Stream。 map操作的语法如下 StreamT map(Function? super T, ? extends U mapper)其中T是Stream中的元素类型U是映射后的元素类型。mapper是一个函数式接口它接受一个元素作为输入并返回一个新的元素作为输出。 map操作的作用是将Stream中的每个元素映射到另一个元素上并返回一个新的Stream。这个操作非常灵活可以用于很多不同的场景。 /*** Description 使用 map 输出了元素对应的平方数* Author IT小辉同学* Date 2023/05/15*/Testpublic void test7() {ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数ListInteger squaresList numbers.stream().map(i - i * i).collect(Collectors.toList());System.out.println(squaresList);}/*** Description 使用 map 输出了元素对应的平方数(去重)* Author IT小辉同学* Date 2023/05/15*/Testpublic void test8() {ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数ListInteger squaresList numbers.stream().map(i - i * i).distinct().collect(Collectors.toList());System.out.println(squaresList);}/*** Description 使用 map 输出了元素对应的平方数(去重并且排序)* Author IT小辉同学* Date 2023/05/15*/Testpublic void test9() {ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数ListInteger squaresList numbers.stream().map(i - i * i).distinct().sorted().collect(Collectors.toList());System.out.println(squaresList);}/*** Description 使用 map 输出了元素对应的平方数(去重并且排序,限制个数)* Author IT小辉同学* Date 2023/05/15*/Testpublic void test10() {ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数ListInteger squaresList numbers.stream().map(i - i * i).distinct().sorted().limit(3).collect(Collectors.toList());System.out.println(squaresList);}Stream中的parallel并行程序 parallel操作可以将Stream中的每个元素并行处理并返回一个新的Stream。 parallel操作的语法如下 StreamT parallel()其中T是Stream中的元素类型。 parallel操作的作用是将Stream中的每个元素并行处理并返回一个新的Stream。这个操作可以用于处理大量数据提高处理效率。 需要注意的是parallel操作会创建一个新的线程来处理每个元素这可能会导致性能开销。因此在使用parallel操作时需要根据具体的情况来评估其性能开销并进行适当的优化。 /*** Description 获取空字符串的数量* Author IT小辉同学* Date 2023/05/15*/Testpublic void test11() {ListString strings Arrays.asList(abc, , bc, efg, abcd, , jkl);// 获取空字符串的数量long count strings.parallelStream().filter(string - string.isEmpty()).count();System.out.println(count);}/*** Description 去除空字符串转换为数组* Author IT小辉同学* Date 2023/05/15*/Testpublic void test12() {ListString strings Arrays.asList(abc, , bc, efg, abcd, , jkl);// 获取空字符串的数量ListString stringList strings.parallelStream().filter(string -!string.isEmpty()).collect(Collectors.toList());System.out.println(stringList);}Stream中的Collectors聚合操作 Stream中的Collectors聚合操作是一种用于对流数据进行处理的方法它可以将流中的元素按照指定的规则进行分组、过滤、映射等操作最终生成一个新的流。 以下是一些常见的聚合操作 toList():将流中的元素收集到一个List中。 ListInteger list stream.collect(Collectors.toList());toSet():将流中的元素收集到一个Set中去重。 SetInteger set stream.collect(Collectors.toSet());toMap():将流中的元素按照指定的键值对进行分组并返回一个Map对象。 MapString, Integer map stream.collect(Collectors.toMap(Function.identity(), Function.identity()));maxBy():按照指定的属性或方法对流中的元素进行比较返回最大值。 OptionalInteger max stream.max(Comparator.comparingInt(i - i));minBy():按照指定的属性或方法对流中的元素进行比较返回最小值。 OptionalInteger min stream.min(Comparator.comparingInt(i - i));sum():对流中的数字类型元素进行求和。 long sum stream.mapToLong(i - i).sum();count():统计流中元素的数量。 long count stream.count();average():计算流中数字类型元素的平均值。 double average stream.mapToDouble(i - i).average().orElse(0d);filter():根据指定的条件过滤流中的元素。 stream.filter(i - i 10).forEach(System.out::println); // 输出大于 10 的元素distinct():去重操作返回不同的元素组成的流。 ListInteger distinctList stream.distinct().collect(Collectors.toList()); // 去重后生成 List 集合使用Collectors可以简化代码提高开发效率同时也可以实现更加灵活的数据处理方式。 Stream中的统计函数 另外一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上它们可以用来产生类似如下的统计结果。 好的以下是Stream中的统计函数介绍 count():统计流中元素的数量。 long count stream.count();min():返回流中最小的元素。 OptionalT min stream.min(Comparator.comparing(i - i));max():返回流中最大的元素。 OptionalT max stream.max(Comparator.comparing(i - i));sum():对流中的元素进行求和。 long sum stream.mapToLong(i - i).sum();average():计算流中元素的平均值。 double average stream.mapToDouble(i - i).average().orElse(0d);distinct():返回去重后的元素列表。 ListT distinctList stream.distinct().collect(Collectors.toList()); // 去重后生成 List 集合anyMatch():判断流中是否存在至少一个满足条件的元素。 boolean anyMatch stream.anyMatch(i - i 10); // 判断是否存在大于 10 的元素allMatch():判断流中的所有元素是否都满足条件。 boolean allMatch stream.allMatch(i - i 10); // 判断所有元素是否都大于 10noneMatch():判断流中是否不存在满足条件的元素。 boolean noneMatch stream.noneMatch(i - i 10); // 判断是否不存在小于 10 的元素一个小例子结束学习之旅 数字平方排序倒叙输出 字符串转 map 输出 public static void main(String[] args) {ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数// ListInteger squaresList numbers.stream().map( i - i*i).distinct().collect(Collectors.toList());ListInteger squaresList numbers.stream().map(i - i * i).sorted((x, y) - y - x).collect(Collectors.toList());// squaresList.forEach(System.out::println);squaresList.forEach(num - {num;System.out.println(num);});ListString strList Arrays.asList(a, ba, bb, abc, cbb, bba, cab);MapInteger, String strMap new HashMapInteger, String();strMap strList.stream().collect( Collectors.toMap( str - strList.indexOf(str), str - str ) );strMap.forEach((key, value) - {System.out.println(key::value);});}sorted()方法的第二个参数是一个比较器(Comparator),用于指定排序规则。比较器的逻辑接受两个参数分别代表要比较的两个元素返回一个负数、零或正数表示第一个参数小于、等于或大于第二个参数。 在sorted((x, y) - y - x)中括号内的第一个参数x和第二个参数y分别代表要比较的两个元素。比较器的逻辑是按照从每个元素到自身的降序差值进行比较即用第二个元素减去第一个元素得到的结果就是它们之间的大小关系。如果结果为负数则说明第一个元素小于第二个元素如果结果为0,则说明它们相等如果结果为正数则说明第一个元素大于第二个元素。 因此sorted((x, y) - y - x)实际上定义了一个从每个元素到自身的降序差值的比较器用于对列表进行排序操作。 前辈的文章推荐如果感觉对于个人这篇文章已经透彻可以看看前辈的文章本人学习之后方知自我之浅薄
http://www.hkea.cn/news/14469319/

相关文章:

  • 网站优化是往新闻中心发新闻吗wordpress添加3D
  • 加强网站内容建设wordpress cms
  • 找快照网站查询重庆网站建设网站
  • 网站制作的基本流程是什么做一款app的流程
  • wordpress快速建站大连网站设计公司
  • 建站之星模板好吗wordpress获取登录密码错误
  • js网站一键变灰发光字体制作网站
  • 外贸阿里巴巴国际站榆林网站优化
  • 网站素材库免费做网站建设怎么赚钱
  • 漯河网站开发郑州网站建设口碑好
  • 律师事务所 网站备案建设网站如果赚钱
  • 给网站公司做网站上海搬家公司哪家口碑最好
  • 个人做商贸网站如何查询一个网站的空间服务商
  • 创建个人网站教程怎么创建自己的网站
  • 学校网站源码php桂林网站开发m0773
  • 搜索关键字搜索到网站简单的php购物网站源码
  • 自治区建设厅网站知名购物网站有哪些
  • 上海做网站比较好的公司有哪些宁波网站排名提升
  • 网站建设合同需要交印花税怎么给网站命名
  • php网站链接支付宝青之峰做网站
  • xcode 网站开发哪有学电脑培训班
  • 企业组织网站建设方案wordpress single_post_title
  • 微商手机网站模板企业域名是什么
  • 足球比方类网站开发重庆餐饮网站设计
  • wordpress装修套餐网站源码中山网站建设文化如何
  • 枣庄机关建设网站wordpress求助
  • 专业的河南网站建设公司网站的二次开发
  • 质感设计网站企业官方网站的建设
  • metro网站模板好网站建设公司地址
  • 建设银行网站首页是多少深圳的网站建设公司价格