JDK8新特性之stream

stream中有很多方法,讲一些常用的。

1.forEach(),遍历方法,很简单,对于一般的遍历可以替代for循环

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

strings.stream().forEach(System.out::println);

  stream()是先将数组或列表流化,然后forEach()遍历并打印。这里用到::会在另一篇博文中专门说。

2.map(),用于映射数组或列表的结果,即对元素进行操作,然后按顺序输出或保存。

  

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        // 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

  一般可以用于类型转换、或其他简单的映射。

3.filter(),过滤器,一般用于对元素数据的过滤

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
long count = strings.stream().filter(string -> string.isEmpty()).count();

  过滤方法的实现一般用->去实现,可以在括号中定制实现过滤方法。

4.limit(),limit 方法用于获取指定数量的流

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

5.sorted(),排序方法,很好理解。

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

6.Collector 进行一些归约操作

方法很多,这个后面详细说

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);

toList是将流转换成List

join是将字符串以规定的格式输出,甚至可以规定前缀、后缀。

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("筛选列表: " + filtered); StringmergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("合并字符串: " + mergedString);

原文地址:https://www.cnblogs.com/onlyzhangmeng/p/11901795.html

时间: 2024-11-09 02:59:13

JDK8新特性之stream的相关文章

Jdk8新特性之Stream(3)

对比一下串行流和并行流的效率: /** * @author WGR * @create 2020/3/31 */ public class Demo07Parallel { private static final int times = 500000000; long start; @Before public void init() { start = System.currentTimeMillis(); } @After public void destory() { long end

jdk8新特性---list.stream

项目中用到了该api ,记录下来 具有get set 构造方法的实体类 开始使用: 结果为: 原文地址:https://www.cnblogs.com/msi-chen/p/10398695.html

一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)

面试涉及问题含有: Java JDK8新特性 集合(哈希冲突.HashMap的原理.自动排序的集合TreeSet) 多线程安全问题 String和StringBuffer JVM 原理.运行流程.内部结构 Linux 查询含有某字符串内容的命令grep 查询进程.GC状态.杀死进程 Hadoop五种节点介绍 -----------------------------------------------------------------------------------------------

JDK8 新特性

JDK8 新特性目录导航: Lambda 表达式 函数式接口 方法引用.构造器引用和数组引用 接口支持默认方法和静态方法 Stream API 增强类型推断 新的日期时间 API Optional 类 重复注解和类型注解 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升. 如下示例,将一个匿名类转换为Lambda表达

java进阶一之jdk8新特性

1.官方发布的jdk8新特性 2.51CTO相关专题

Java 8 新特性:Java 类库的新特性之 Stream类 ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  Java 类库的新特性之 Stream类 (注:此文中涉及到的一部分图片为网络图片,若有问题,请联系我将其删除.) 一.Java8对IO/NIO 的改进 Java 8 对 IO/NIO 也做了一些改进,主要包括: 改进了java.nio.charset.Charset 的实现,使编码和解码的效率得以提升: 精简了jre/lib

JDK9新特性 Reactive Stream 响应式流

JDK9新特性 Reactive Stream 响应式流  本篇主要讲解 JDK9特性 Reactive Stream 响应式流,介绍 Reactive Stream是什么 背压是什么,以及JDK9中提供的关于Reactive Stream的接口和 2个使用案例包括如何使用Processor.  1.Reactive Stream 概念  Reactive Stream (响应式流/反应流) 是JDK9引入的一套标准,是一套基于发布/订阅模式的数据处理规范.响应式流从2013年开始,作为提供非阻

jdk8新特性

jAVA8 十大新特性 投稿:junjie 字体:[增加 减小] 类型:转载 本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API "Java is still not dead-and people are starting to figure that out." 本教程将用带注释的简单代码来描述新特性,你将

类的加载、时机、反射、模板设计、jdk7/jdk8新特性(二十六)

1.类的加载概述和加载时机 * A:类的加载概述 * 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. * 加载 * 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. * 连接 * 验证 是否有正确的内部结构,并和其他类协调一致 * 准备 负责为类的静态成员分配内存,并设置默认初始化值 * 解析 将类的二进制数据中的符号引用替换为直接引用 * 初始化 就是我们以前讲过的初始化