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

成都网站建设_创新互联wordpress 相邻文章

成都网站建设_创新互联,wordpress 相邻文章,页面设计培训排名,开发门户网站报价Java 8的Stream API提供了一种功能强大的方式来处理集合数据#xff0c;以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作#xff0c;如过滤、映射和归约#xff0c;以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念#xff…Java 8的Stream API提供了一种功能强大的方式来处理集合数据以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作如过滤、映射和归约以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念 ① 创建流您可以从各数据源创建流如集合、数组或I/O通道。 ② 中间操作Stream提供了一组中间操作可以链接在一起对数据进行转换或过滤。一些常见的中间操作包括filter、map、flatMap、distinct、sorted和limit。 ③ 终端操作终端操作用于生成结果或产生副作用。终端操作的示例包括forEach、collect、reduce、min、max和count。 ④ 惰性求值Stream支持惰性求值这意味着中间操作只有在调用终端操作时才会执行。这样可以高效处理大型数据集。 ⑤ 并行处理Stream API还支持并行处理允许您利用多核处理器加速对大型数据集的操作。您可以使用parallel或parallelStream方法将顺序流转换为并行流。 01. map 函数 通过使用map函数我们可以对流中的每个元素进行转换操作从而得到一个新的流。这种转换可以是类型转换、属性提取、计算等。 NoArgsConstructor AllArgsConstructor Data public class Person {private String name;private Integer age; }Test public void test0() {ListPerson list Arrays.asList(new Person(zhangsan, 10),new Person(zhangsan, 11),new Person(wangwu, 12));//(1) map函数将list中的每个Person对象映射为其name属性并使用collect()方法将新的流收集到一个新的列表nameList中ListString nameList list.stream().map(person - {return person.getName();}).collect(Collectors.toList());System.out.println(nameList); // [zhangsan, zhangsan, wangwu]//(2) map函数将list中的每个Person对象映射为其年龄并将映射后的结果收集到一个新的整数列表ageList中ListInteger ageList list.stream().map(Person::getAge).collect(Collectors.toList());System.out.println(ageList);//(3) map函数将list中的每个Person对象映射为其年龄加1后的整数并使用collect方法将映射后的结果收集到一个新的列表ageList1中ListInteger ageList1 list.stream().map(person - {return person.getAge() 1;}).collect(Collectors.toList());//(4) map函数将list中的每个Person对象的名称转换为大写形式并将结果收集到一个新的字符串列表uppercaseNames中。ListString uppercaseNames list.stream().map(person - {return person.getName().toUpperCase();}).collect(Collectors.toList()); }02. mapToInt函数 mapToInt是Stream接口提供的一个方法用于将流中的元素映射为int类型的值。它接受一个ToIntFunction参数用于指定如何将流中的元素映射为int类型的值。 Test public void test14() {ListInteger numbers Arrays.asList(1, 2, 3, 4, 5);// map 函数StreamInteger stream numbers.stream().map(n - n * n);ListInteger list1 stream.collect(Collectors.toList());System.out.println(list1);// mapToInt 函数IntStream intStream numbers.stream().mapToInt(n - n * n);int sum intStream.sum(); // 求和// OptionalDouble average intStream.average(); // 平均值// OptionalInt max intStream.max(); // 最大值// OptionalInt min intStream.min(); // 最小值 }map和mapToInt都是Stream接口提供的方法用于对流中的元素进行映射转换。它们的区别在于返回值的类型和适用范围 ① map方法接受一个Function参数用于指定如何将流中的元素映射为其他类型的值。它返回一个新的流其中包含映射后的值。返回的流是一个泛型流即Stream其中R是映射后的值的类型。 ② mapToInt方法也接受一个Function参数用于指定如何将流中的元素映射为int类型的值。它返回一个新的IntStream其中包含映射后的int值。返回的流是一个特殊的流专门用于处理int类型的值提供了更高效的操作和更少的内存消耗。 需要注意的是IntStream提供了一些特殊的操作例如sum、average、max、min等这些操作只适用于IntStream而不适用于泛型流Stream。如果需要对映射后的值进行这些特殊操作应该使用mapToInt方法。 除了mapToInt方法Stream接口还提供了其他一些类似的映射方法如mapToLong和mapToDouble用于将流中的元素映射为long类型和double类型的值。 03. filter 函数 通过使用filter函数我们可以根据指定的条件过滤出流中满足条件的元素从而得到一个新的流。这种过滤可以是基于元素的某个属性、某种关系或其他条件。 NoArgsConstructor AllArgsConstructor Data public class Person {private String name;private Integer age; }Test public void test1() {ListPerson list Arrays.asList(new Person(zhangsan, 10),new Person(zhangsan, 11),new Person(wangwu, 12));// filter函数过滤出列表中Person对象的name为zhangsan的元素最后使用collect方法将过滤后的结果收集到一个新的列表中。ListPerson list1 list.stream().filter(person - {return person.getName().equals(zhangsan);}).collect(Collectors.toList());System.out.println(list1); // [Person(namezhangsan, age10), Person(namezhangsan, age11)]// 简洁写法ListPerson list2 list.stream().filter(person - person.getName().equals(zhangsan)).collect(Collectors.toList());// filter函数过滤出列表中Person对象的age为偶数的元素最后使用collect方法将过滤后的结果收集到一个新的列表中。ListPerson list3 list.stream().filter(person - person.getAge() % 2 0).collect(Collectors.toList());System.out.println(list3); // [Person(namezhangsan, age10), Person(namewangwu, age12)] }04. flatMap 函数 flatMap函数是一种中间操作用于对流中的每个元素进行映射操作并将映射结果扁平化为一个新的流。 ① flatMap函数将每个子列表映射为一个流并将这些流扁平化为一个新的流 Test public void test2() {// 首先创建一个嵌套的整数列表nestedList其中包含了三个子列表。ListListInteger nestedList Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5, 6),Arrays.asList(7, 8, 9));// flatMap函数将每个子列表映射为一个流并将这些流扁平化为一个新的流最后使用collect方法将扁平化后的结果收集到一个新的整数列表flattenedList中。ListInteger flattenedList nestedList.stream().flatMap(list-{return list.stream();}).collect(Collectors.toList());// 简洁写法ListInteger collect nestedList.stream().flatMap(List::stream).collect(Collectors.toList());System.out.println(collect); }② 使用flatMap函数将list中每个Person对象的ids列表扁平化为一个新的流 NoArgsConstructor AllArgsConstructor Data public class Person {ListInteger ids;private String name;private Integer age;public Person(String name,Integer age){this.name name;this.age age;} }Test public void test3() {Person qo1 new Person(zhangsan,10);qo1.setIds(Arrays.asList(1,2,3));Person qo2 new Person(zhangsan,11);qo2.setIds(Arrays.asList(4,5,6));Person qo3 new Person(wangwu,12);qo3.setIds(Arrays.asList(7,8,9));ListPerson list new ArrayList();list.add(qo1);list.add(qo2);list.add(qo3);ListInteger list1 list.stream().flatMap(Person - {return Person.getIds().stream();}).collect(Collectors.toList());System.out.println(list1); // [1, 2, 3, 4, 5, 6, 7, 8, 9]ListListInteger list2 list.stream().map(Person - {return Person.getIds();}).collect(Collectors.toList());System.out.println(list2); // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]ListInteger list3 list.stream().flatMap(Person - {return Optional.ofNullable(Person.getIds()).orElse(new ArrayList()).stream();}).collect(Collectors.toList());System.out.println(list3); // [1, 2, 3, 4, 5, 6, 7, 8, 9] }05. distinct 函数 distinct函数是一种中间操作用于去除流中的重复元素保留唯一的元素。它会根据元素的equals方法进行比较来判断元素是否重复。 Test public void test4() {ListInteger list Arrays.asList(1, 1, 2, 2, 3, 3, 4, 5);ListInteger list1 list.stream().distinct().collect(Collectors.toList());System.out.println(list1); }如果想要根据对象的属性进行去重您可以使用Java 8的Stream API结合distinct函数和自定义的equals和hashCode方法来实现。 NoArgsConstructor AllArgsConstructor Data public class Person {private String name;private int age;Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Person person (Person) o;return age person.age Objects.equals(name, person.name);}Overridepublic int hashCode() {return Objects.hash(name, age);} }Test public void test5() {ListPerson list Arrays.asList(new Person(zhangsan, 10),new Person(zhangsan, 10),new Person(wangwu, 12));ListPerson collect list.stream().distinct().collect(Collectors.toList());System.out.println(collect); // [Person(namezhangsan, age10), Person(namewangwu, age12)] }06. sorted 函数 sorted函数是一种中间操作用于对流中的元素进行排序。它可以按照自然顺序或者通过自定义的比较器进行排序。 ① sorted()按照自然顺序对流中的元素进行排序。 Test public void test6() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);ListInteger sortedNumbers numbers.stream().sorted().collect(Collectors.toList());System.out.println(sortedNumbers); // [1, 2, 3, 5, 8] }② sorted(Comparator? super T comparator)根据自定义的比较器对流中的元素进行排序。 Test public void test7() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);ListInteger sortedNumbers numbers.stream().sorted(new ComparatorInteger() {Overridepublic int compare(Integer obj1, Integer obj2) {// 倒序排序return obj2-obj1;}}).collect(Collectors.toList());System.out.println(sortedNumbers); // [8, 5, 3, 2, 1]// 降序排序ListInteger collect numbers.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); }07. limit 函数 limit 函数是一种中间操作用于截取流中的前n个元素。它会返回一个新的流其中包含原始流中的前n个元素。 Test public void test8() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);// 截取列表中的前3个元素ListInteger list1 numbers.stream().limit(3).collect(Collectors.toList());System.out.println(list1); // [5, 2, 8]// 对列表中的元素排序再截取列表中的前3个元素ListInteger list2 numbers.stream().sorted().limit(3).collect(Collectors.toList());System.out.println(list2); // [1, 2, 3] }08. min 函数 min函数是一种终端操作用于找到流中的最小元素。它接受一个Comparator函数作为参数用于确定元素的顺序。通过使用min函数我们可以方便地找到流中的最小元素。这对于需要找到最小值或根据某个属性进行排序的场景非常有用。 Test public void test9() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);// min函数并传入比较器找到流中的最小值OptionalInteger optional numbers.stream().min(new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {// 正序排序return o1 - o2;}});// 简洁写法OptionalInteger optional1 numbers.stream().min(Integer::compareTo);// 使用Optional类来处理可能为空的结果并打印输出最小值if(optional.isPresent()){System.out.println(optional.get()); // 1}else {System.out.println(Stream is empty);} }Test public void test10() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);// min函数并传入比较器OptionalInteger optional numbers.stream().min(new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {// 倒叙排序return o2-o1;}});// 使用Optional类来处理可能为空的结果if(optional.isPresent()){System.out.println(optional.get()); // 8}else {System.out.println(Stream is empty);} }09. max 函数 max函数是一种终端操作用于找到流中的最大元素。它接受一个Comparator函数作为参数用于确定元素的顺序。 Test public void test11() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);// max函数并传入比较器OptionalInteger optional numbers.stream().max(new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {// 正序排序return o1-o2;}});// 简洁写法OptionalInteger optional1 numbers.stream().max(Integer::compareTo);// 使用Optional类来处理可能为空的结果if(optional.isPresent()){System.out.println(optional.get()); // 8}else {System.out.println(Stream is empty);} }10. count 函数 count函数是一种终端操作用于计算流中的元素数量。它返回一个long类型的值表示流中的元素个数。 Test public void test12() {ListInteger numbers Arrays.asList(5, 2, 8, 1, 3);System.out.println(numbers.stream().count()); // 5 }11. groupby 函数 groupBy函数用于对流中的元素进行分组。groupBy函数接受一个Function参数用于指定分组的依据。它将流中的元素按照该函数的返回值进行分组并返回一个Map对象其中键是分组的依据值是属于该分组的元素列表。 Test public void test12() {ListInteger numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 使用 n - n % 2 0 ? 偶数 : 奇数作为分组的依据将整数列表按照奇偶数进行分组。// 最终得到的groups对象是一个Map其中键是奇数和偶数值是属于该分组的整数列表。MapString, ListInteger groups numbers.stream().collect(Collectors.groupingBy(n - n % 2 0 ? 偶数 : 奇数));System.out.println(groups); // {偶数[2, 4, 6, 8, 10], 奇数[1, 3, 5, 7, 9]} }还可以使用groupBy函数按照对象的属性进行分组。 Test public void test13() {ListPerson list Arrays.asList(new Person(zhangsan, 10),new Person(lisi, 10),new Person(wangwu, 12));MapInteger, ListPerson map list.stream().collect(Collectors.groupingBy(person - person.getAge()));// MapInteger, ListPerson map list.stream().collect(Collectors.groupingBy(Person::getAge));System.out.println(map); // {10[Person(namezhangsan, age10), Person(namelisi, age10)], 12[Person(namewangwu, age12)]} }
http://www.w-s-a.com/news/474467/

相关文章:

  • 电子商务网站制作步骤免费建网站知乎
  • 龙岩有什么招聘本地网站团购网站 方案
  • 服务器运行一段时间网站打不开注册公司名字核名查询系统
  • 企业网站改版的意义响应式网站建设新闻
  • 大连金州新区规划建设局网站金坛市建设局网站
  • 有哪些做排球比赛视频网站wordpress 教师工作坊
  • 深圳好点的网站建设公司互联网企业信息服务平台
  • 下载空间大的网站建设哈尔滨网站制作软件
  • 南城网站仿做无锡网站制作哪家价格便宜
  • c做的网站营销策划课程
  • 免费网站404免费进入重庆的公需科目在哪个网站做
  • 网站空间租用费用网站建设公司怎么宣传
  • 镇江网站建设优化案例分析dw2018网页制作步骤图文
  • 网站开发一个多少钱为什么前端都不用dw
  • 网站降权的原因北京中小企业网站建设公司
  • 个人域名能做网站吗wordpress
  • 手机网站设计只找亿企邦工业设计公司简介
  • 腾讯云主机做网站免费网站怎么做啊
  • 网站建设推广销售话术广州网页定制多少钱
  • 备案号是哪个网站项目管理pmp
  • 做网站需要哪些硬件软件网站视频链接怎么做的
  • 电子商务网站建设试题二wordpress主页显示浏览数
  • 网站快照没了广州企业电话大全
  • 网站项目开发收费标准网站开发app开发主营业务
  • 怎么到国外网站去接模具订单做互联网建设企业网站
  • 深圳品牌网站建设公司排名洪雅网站建设
  • nodejs 做网站wordpress主题绕过激活码
  • 平湖模板网站建设公司网页美工培训
  • 顺德网站建设市场建设工程交易中心网站
  • 深圳企业网站怎么做浪琴手表网站建设图