首页 文章 精选 留言 我的

精选列表

搜索[骁龙8至尊版],共10000篇文章
优秀的个人博客,低调大师

java 8 流Stream 的简单认识

Stream 允许我们以声明的方式处理数据。 简介 在 Java 中,集合和数组是两种常见的数据结构 类似于 SQL 语句从数据库查询数据的形式,Stream 提供了对 Java 集合操作和表示的高度抽象。 要处理的元素集合被视为流,在流水线中进行传输。并可在流水线各节点处理这些元素,例如过滤,排序和聚合。 特点 不占用空间。Stream 只是数据源的视图,表现形式可以是数组、容器或者I/O通道。 流操作数据源,不会改变数据源。 例如: 过滤Stream后不会删除过滤的元素,而是生成一个新的不包含过滤元素的Stream 懒加载。 对Stream的操作只有在需要的时候才会执行。 不可重复消费。 在流的生命周期中,元素仅能被访问一次。 操作 流的创建 集合创建 List<String> list = Arrays.asList("Hello", "Word", "!"); Stream<String> stream = list.stream(); Stream自带的方法 Stream<String> streams = Stream.of("Hello", "Word", "!"); 中间操作 多个中间操作组合形成流水线,中间操作返回的是一个新的Stream. filter System.out.println(streams.stream().filter((e) -> "Hello".equals(e))); strings.stream().filter(e -> !e.isEmpty()).forEach(System.out::println); 映射 map(Function f):接收一个函数作为参数,该函数会被应用到流中的每个元素上,并将其映射成一个新的元素。 flatMap(Function> mapper):接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流 List<String> numbers = Arrays.asList("a","b"); numbers.stream().map(i -> i + i).forEach(System.out::println); Stream<List<String>> stream2 = Stream.of(Arrays.asList("H","E"), Arrays.asList("L", "L", "O")); stream2.flatMap(list -> list.stream()).forEach(System.out::println); limit/skip limit 返回 Stream 中的前 N 个元素。skip 舍弃 Stream 中的前 N 个元素。 List<String> numbers = Arrays.asList("a","b"); numbers.stream().limit(1).forEach(System.out::println); numbers.stream().skip(1).forEach(System.out::println); 排序 sorted():自然排序使用Comparable的int compareTo(T o)方法 sorted(Comparator com):定制排序使用Comparator的int compare(T o1, T o2)方法 List<String> numbers = Arrays.asList("b","a"); numbers.stream().sorted().forEach(System.out::println); numbers.stream().sorted((x,y) -> y.compareTo(x)).forEach(System.out::println); distinct 去重 List<String> numbers = Arrays.asList("b","a","b"); numbers.stream().distinct().forEach(System.out::println); reduce 累加 System.out.println("=====reduce:将流中元素反复结合起来,得到一个值=========="); Stream<Integer> stream = Stream.iterate(1, x -> x+1).limit(200); //stream.forEach(System.out::println); Integer sum = stream.reduce(10,(x,y)-> x+y); System.out.println(sum); 终端操作 返回值不为Stream 的为终端操作(立即求值),终端操作不支持链式调用,会触发实际计算 执行过末端操作以后,Stream 不可再次使用,且不允许执行任何中间操作。 forEach 遍历 List<String> numbers = Arrays.asList("b","a","b"); numbers.stream().forEach(System.out::println); count 统计个数 List<String> numbers = Arrays.asList("b","a"); numbers.stream().count(); collect 组合,返回对应的类型,包括list,set,treeset ,map 等 List<String> numbers = Arrays.asList("b","a"); numbers = numbers.stream().sorted().collect(Collectors.toList()); List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","bing",1), new lambdaDemo("li","hua",2)); Map<Integer,String> maps = lambdaDemos.stream().collect(Collectors.toMap(lambdaDemo::getAge,lambdaDemo::getName)); System.out.println(maps); //以年龄为唯一值, public static Map<Integer,lambdaDemo> check(List<lambdaDemo> lambdaDemos){ return lambdaDemos.stream().collect(Collectors.toMap(lambdaDemo::getAge, Function.identity(), (existing, replacement) -> existing)); } 分组和分区 Collectors.groupingBy()对元素做group操作。 Collectors.partitioningBy()对元素进行二分区操作。 public static void test9() { List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","黑人",65), new lambdaDemo("li","黑人",40), new lambdaDemo("liu","白人",40)); System.out.println("=======根据人的肤色进行分组=========================="); Map<String, List<lambdaDemo>> map = lambdaDemos.stream().collect(Collectors.groupingBy(lambdaDemo::getName)); System.out.println(map); System.out.println("=======根据人的年龄范围多级分组=========================="); Map<Integer, Map<String, List<lambdaDemo>>> map2 = lambdaDemos.stream().collect(Collectors.groupingBy(lambdaDemo::getAge, Collectors.groupingBy( ( p ) -> { if ( p.getAge() > 60 ) { return "老年人"; } else { return "年轻人"; } } ) )); System.out.println(map2); } public static void test10() { List<lambdaDemo> lambdaDemos = Arrays.asList(new lambdaDemo("zhang","黑人",60), new lambdaDemo("li","黑人",2), new lambdaDemo("liu","白人",3)); System.out.println("========根据人的年龄是否大于40进行分区========================"); Map<Boolean, List<lambdaDemo>> map = lambdaDemos.stream().collect(Collectors.partitioningBy(p -> p.getAge() > 40)); System.out.println(map); } github博客列表地址 github 欢迎关注公众号,查看更多内容 :

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册