首页 > 编程语言 >Java基础 Stream 流的终结方法

Java基础 Stream 流的终结方法

时间:2023-10-19 21:01:07浏览次数:31  
标签:Java Stream 终结 ArrayList list 赵六 王五 new apply

void  forEach ( Consumer  action )   →   遍历

long  count ()   →   统计

toArray ()   →   收集流中的数据,放到数组中

collect ( Collector  collector )   →   收集流中的数据,放到集合中

 

 

count () 方法:

ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");
long count = list.stream().count();
System.out.println(count); // 输出 4



toArray () 方法:
toArray () 方法的参数的作用:负责创建一个指定类型的数组
toArray () 方法的底层 会依次得到流里面的每一个数据,并把数据放到数组当中
toArray () 方法的返回值:是一个装着流里面所有数据的数组

eg:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三", "李四", "王五", "赵六");

// IntFunction 的泛型:具体类型的数组(以 String 为例)
String[] arr = list.stream().toArray(new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
// apply 方法的形参 value 表示流中数据的个数,要跟数组的长度保持一致(流里面有多少个数据,数组的长度就是多少)
// apply 方法的返回值:具体类型的数组,类型与 IntFunction 的泛型保持一致
// apply 方法的反方法体:就是创建数组
return new String[value];
}
});
System.out.println(Arrays.toString(arr)); // 打印结果:[张三, 李四, 王五, 赵六]




collect(Collector collector) 方法:收集流中的数据,放到集合中(List Set Map)
1. 收集到 List 集合当中:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-男-15", "李四-女-16", "王五-女-17", "赵六-男-18");
List<String> newList = list.stream().collect(Collectors.toList());
System.out.println(newList);

2. 收集到 Set 集合当中:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-男-15", "李四-女-16", "王五-女-17", "赵六-男-18");
Set<String> newList = list.stream().collect(Collectors.toSet());
System.out.println(newList);

3. 收集到 Map 集合当中:(要规定谁作为键,谁作为值)
注意:如果我们要收集到Map集合当中,键不能重复,否则会报错
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");

//toMap方法的两个形参:第一个表示键的生成规则,第二个表示值的生成规则
Map<String, Integer> map = list.stream().collect(Collectors.toMap(new Function<String, String>() {//第一个泛型表示流里面数据的类型,第二个泛型表示Map集合当中键的类型
@Override
public String apply(String s) {//形参 s 依次表示流里面的每一个数据。apply方法体的作用:生成键。返回值:生成的键
return s.split("-")[0];
}
}, new Function<String, Integer>() {//第一个泛型表示流里面数据的类型,第二个泛型表示Map集合当中值的类型
    @Override
public Integer apply(String s) {//形参 s 依次表示流里面的每一个数据。apply方法体的作用:生成值。返回值:生成的值
        return Integer.parseInt(s.split("-")[1]);
    }
}));

System.out.println(map); //打印结果:{李四=16, 张三=15, 王五=17, 赵六=18}

简写形式:
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "张三-15", "李四-16", "王五-17", "赵六-18");

Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(s -> s.split("-")[0], s -> Integer.parseInt(s.split("-")[1])));

System.out.println(map);

标签:Java,Stream,终结,ArrayList,list,赵六,王五,new,apply
From: https://www.cnblogs.com/gagaya2/p/17775627.html

相关文章

  • Javaweb后端-cnblog
    Javaweb后端目录Javaweb后端MavenHTTP请求响应请求(补充)xml文件分层解耦三层架构IOC/DI入门IoC控制反转DI依赖注入MySQL事务索引分页查询MyBatis快速入门数据库连接池Lombok增删改查删除新增查询条件查询xml映射文件动态sql案例部门管理分页查询文件上传阿里云OSS配置文件参数......
  • JAVA项目常用异常处理汇总
    1.空指针异常(java.lang.nullpointerexception) 发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等。还有一种情况是当该对象为空时你并没有判断是否为空值,这个错误我在之前的web习题上犯过,因此为了避免这种情况,除了检查是否初始化之外,如有必要则要加上判断是......
  • Java拾贝第六天——匿名内部类
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么匿名内部类匿名对象没忘吧?newPerson();//语法同匿名内部类匿名内部类就是匿名的局部内部类,地位同局部变量。有两种形式:基于接口的匿名内部类,基于类的匿名内部类基于接口的匿名内部类常规方式实现接口并重写其方法publ......
  • JAVA项目中的常用的异常处理情况
    #Java项目中常用的异常处理情况Java是一种强类型、面向对象的编程语言,它具有丰富的异常处理机制。异常处理是编写健壮、可靠和可维护的Java代码的关键组成部分。在Java项目中,处理异常的方式通常包括:##1.try-catch-finally块try-catch-finally是Java中最常见的异常处理机......
  • CSP模拟58联测20 T3 注视一切的终结
    CSP模拟58联测20T3注视一切的终结题面及数据范围Ps:链接为衡水中学OJ。去除重边以后是树,而我们需要使一个点到另外一个点的简单路径上相邻边的颜色尽可能不相同。发现如果一条边有\(3\)种或以上的颜色,那么该边肯定可以与相邻边不同,所以把\(\geq3\)的情况均看为\(3\)的......
  • Java有哪些保证原子性的方法?如何保证多线程下i++ 结果正确?什么是原子操作类?
    使用循环原子类,例如AtomicInteger,实现i++原子操作使用juc包下的锁,如ReentrantLock,对i++操作加锁lock.lock()来实现原子性使用synchronized,对i++操作加锁原子操作类当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经......
  • JavaScript内置对象和DOM
    数组数组遍历/* 数组遍历的方法 1.for循环遍历数组下标输出 2.forEach遍历forEach(function(item,index,arr)) 3.filter(function(item,index,arr))返回一个新数组,回调函数返回true的结果会保存在新数组中 4.map(function(item,index,arr)) 返回一个新数组,回调函数retur......
  • [Java]Java初学之多线程01
    Intro写完上一篇博客就立刻开始了Java多线程的学习学习这个东西还是得趁热打铁,一两天不学感觉知识要从脑子里流走了(不要啊(≧□≦)ノ)就是这样,这篇文章主要集中在Java多线程的相关内容,可能会分篇写。正文程序(Program)、进程(Process)、线程(Thread)在正式学习内容之前,我觉得先......
  • 基于Java Web的多功能旅游网站的设计与实现-计算机毕业设计源码+LW文档
    摘 要 随着时代的发展,人们对旅游也越来越重视,近些年来我国的旅游产业也发生了翻天覆地的变化,但是很多人在出去旅游的时候不知道去哪里旅游,在预订酒店和机票的时候也没有一个综合性的旅游网站,为了让人们的旅游变的更加的方便,为此我开发了本基于JavaWeb的多功能旅游网站本基于......
  • 基于Java的智慧图书管理系统-计算机毕业设计源码+LW文档
    摘要随着时代的发展,图书的重要性显示的越来越突出了,尤其是知识大爆炸的这个年代,人们需要掌握的知识也越来越多,只有不断的提高自己才能够更好的立足于社会,但是通常情况下很多图书的价格比较高,这个时候就可以通过图书馆借阅图书来达到图书阅读的目的,为了让图书借阅变的更加的方便我......