Java函数式编程

您所在的位置:网站首页 怎么删除steam游戏数据 Java函数式编程

Java函数式编程

2023-06-30 06:15| 来源: 网络整理| 查看: 265

Java Steam详解 前言一、Steam是什么?二、介绍四、流的中间操作五、映射六、排序七、流的终止操作总结

正文:

前言

随着社会的不断发展,Java这门技术也越来越重要,很多人都开启了学习Java编程,本文就介绍了Java中Steam流程的一些内容。

一、Steam是什么?

Stream是 Java 8新增加的类,用来补充集合类。 Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。 Java Stream提供了提供了串行和并行两种类型的流,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和最终执行操作,为Java语言的集合提供了现代语言提供的类似的高阶函数操作,简化和提高了Java集合的功能。

二、介绍

Stream 代表了来自某个源的对象的序列,这些序列支持聚集操作。下面是 Stream 的一些特性:

元素序列:Stream 以序列的形式提供了特定类型的元素的集合。根据需求,它可以获得和计算元素,但不会储存任何元素。 源:Stream 可以将集合、数组和 I/O 资源作为输入源。 聚集操作:Stream 支持诸如filter、map、limit、reduce等的聚集操作。 流水技术:许多 Stream 操作返回了流本身,故它们的返回值可以以流水的形式存在。这些操作称之为中间操作,并且它们的功能就是负责输入、处理和向目标输出。collect()方法是一个终结操作,通常存在于流水线操作的末端,来标记流的结束。 自动迭代:Stream 的操作可以基于已提供的源元素进行内部的迭代,而集合则需要显式的迭代。

相关方法

集合的接口有两个方法来产生流:

stream():该方法返回一个将集合视为源的连续流。parallelStream():该方法返回一个将集合视为源的并行流。

常用方法:

forEach:该方法用于对 Stream 中的每个元素进行迭代操作。 map:该方法用于将每个元素映射到对应的结果上。 filter:该方法用于过滤满足条件的元素。 limit:该方法用于减少 Stream 的大小。 sorted:该方法用于对 Stream 排序。

3.1 使用Collection下的 stream() 和 parallelStream() 方法

代码如下(示例):

List list = new ArrayList(); Stream stream = list.stream(); //获取一个顺序流 Stream parallelStream = list.parallelStream(); //获取一个并行流

3.2 使用Arrays 中的 stream() 方法,将数组转成流

Integer[] nums = new Integer[10]; Stream stream = Arrays.stream(nums); 四、流的中间操作

筛选与切片

filter:过滤流中的某些元素 limit skip distinct sorted 都是有状态操作,这些操作只有拿到前面处理后的所有元素之后才能继续下去。 limit(n):获取前n个元素 skip(n):跳过前n元素,配合limit(n)可实现分页 distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素

部分代码示例:

Stream stream = Stream.of(6, 4, 6, 7, 3, 9, 8, 10, 12, 14, 14); Stream newStream = stream.filter(s -> s > 5) //6 6 7 9 8 10 12 14 14 .distinct() //6 7 9 8 10 12 14 .skip(2) //9 8 10 12 14 .limit(2); //9 8 newStream.forEach(System.out::println); 五、映射

map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。 flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

List list = Arrays.asList("a,b,c", "1,2,3"); // 去掉字符串中所有的, List collect = list.stream().map(s -> s.replaceAll(",", "")).collect(Collectors.toList()); System.out.println(collect); // flatMap 接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。 Stream stringStream = list.stream().flatMap(s -> { // 将字符串以,分割后得到一个字符串数组 String[] split = s.split(","); // 然后将每个字符串数组对应流返回,flatMap会自动把返回的所有流连接成一个流 Stream stream = Arrays.stream(split); return stream; }); System.out.println(stringStream.collect(Collectors.toList())); 六、排序

sorted():自然排序,流中元素需实现Comparable接口 sorted(Comparator com):定制排序,自定义Comparator排序器

自然排序 // 按照color的字符串大小进行排序 @Override public int compareTo(Apple o) { return color.compareToIgnoreCase(o.color); } 自定义排序 List compare = appleList.stream().sorted((o1, o2) -> { if (!o1.getColor().equals(o2.getColor())) { // compareToIgnoreCase 忽略大小写排序,大于返回ascll的差值,正值,小于返回负值 return o1.getColor().compareToIgnoreCase(o2.getColor()); } else { // 逆序排列 return o1.getWeight() - o2.getWeight() ; } }).collect(Collectors.toList()); System.out.println(compare); 七、流的终止操作

匹配和聚合

allmatch,noneMatch,anyMatch用于对集合中对象的某一个属性值进行判断, allMatch全部符合该条件返回true, noneMatch全部不符合该断言返回true anyMatch 任意一个元素符合该断言返回true

List list = Arrays.asList(1, 2, 3, 4, 5); boolean allMatch = list.stream().allMatch(e -> e > 10); //false boolean noneMatch = list.stream().noneMatch(e -> e > 10); //true boolean anyMatch = list.stream().anyMatch(e -> e > 4); //true

findFirst:返回流中第一个元素 findAny:返回流中的任意元素 count:返回流中元素的总个数 max:返回流中元素最大值 min:返回流中元素最小值

总结

本章学习了java的Steam流,如有解释不到位的地方多多谅解!欢迎各位大佬莅临指点。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3