首页 > 编程语言 >Java Stream流编程入门

Java Stream流编程入门

时间:2024-09-21 14:19:15浏览次数:3  
标签:Java Stream stream 编程 list System forEach new out

流式编程

在这里插入图片描述

stream流式编程分为

  • 首先转化为stream
  • 中间函数的链接
  • 最后的终结函数

怎么转化为stream

  • 单列集合
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().forEach(System.out::println);
  • 双列集合
Map<String,String> map = new HashMap<String,String>();
map.put("1","2");
map.put("3","4");
map.put("5","6");
map.entrySet().stream().forEach(System.out::println);
  • 数组
Arrays.stream(new int[0]);
  • 多个数字
Stream.of(1,2,3,4).forEach(System.out::println);

常用中间函数

注:中间函数可连接多个

  • filter:过滤
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().filter(s -> s.equals("1")).forEach(System.out::println);

输出:1

  • map:将流中的每个元素传入给定的函数,得到一个新的流。
Stream.of("a","b","c","d").map(String::toUpperCase).forEach(System.out::print);

输出:ABCD

  • limit:取前n个
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().limit(3).forEach(System.out::print);

输出:123

  • skip:跳过前n个
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().skip(4).forEach(System.out::print);

输出:56789

  • distinct:去重,依赖hashCode(),equals()
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","4","3","2","1","0");
list.stream().distinct().forEach(System.out::print);

输出:12340

  • concat:合并两个流
List<String> l1 = new ArrayList<String>();
l1.add("1");
List<String> l2 = new ArrayList<String>();
l2.add("2");
Stream.concat(l1.stream(),l2.stream());

输出:12

  • sorted: 排序
List<Integer> numbers = Arrays.asList(5, 6, 4, 3, 8, 0, 1, 9, 6, 8);
//第一种   默认
numbers.stream()
        .sorted()
        .forEach(System.out::println);
// 第二种  自定义排序
numbers.stream()
        // 如果是b.compareTo(a)则降序  a.compareTo(b)则升序
        .sorted((a, b) -> b.compareTo(a)) 
		.forEach(System.out::println);

输出:
0 1 3 4 5 6 6 8 8 9
9 8 8 6 6 5 4 3 1 0

终结函数

注:终结函数只能有一个

  • forEach:遍历
  • count:求数量
  • collect:收集
lines.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());
lines.stream().collect(Collectors.toSet());
lines.stream().collect(Collectors.toMap(s -> s.split("-")[0],s -> Integer.parseInt(s.split("-")[1])));
  • toArray:转化为数组
String[] strings = lines.stream().toArray(val -> new String[val]);
  • reduce:收纳
List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);

// 示例1: 求和
Optional<Integer> sum = asList.stream()
        .reduce(Integer::sum);
System.out.println("和: " + sum.orElse(0));

// 示例2: 求乘积
Optional<Integer> product = asList.stream()
        .reduce((x, y) -> x * y);
System.out.println("乘积: " + product.orElse(1));

// 示例3: 求最大值
Optional<Integer> max = asList.stream()
        .reduce(Integer::max);
System.out.println("最大: " + max.orElse(0));

输出
和: 15
乘积: 120
最大: 5

注意事项

  • 惰性求值:如果没有终结操作(终结函数),中间操作是不会得到执行的,即没有任何输出。

  • 流的一次性:一旦一个流对象经过一个终结操作后,这个流就不能再被使用了,只能重新创建流对象再使用。

  • 不会影响原数据:我们在流中可以对数据做很多处理,正常是不会影响原来集合中的元素的。

标签:Java,Stream,stream,编程,list,System,forEach,new,out
From: https://blog.csdn.net/2301_77207909/article/details/142415708

相关文章

  • Java中set接口的学习
    Set接口目录Set接口HashSetTreeSetLinkedHashSetEnumSetCopyOnWriteArraySetHashSetJava中的HashSet是集合框架中非常重要的一个类,它实现了Set接口,提供了存储不重复元素的功能。特点无序性:HashSet不保证元素的顺序,即元素的存储顺序与插入顺序无关。遍历HashSet的结果是无序......
  • Java入门:09.Java中三大特性(封装、继承、多态)02
    2继承需要两个类才能实现继承的效果。比如:类A继承类BA类称为子类,衍生类,派生类B类称为父类,基类,超类继承的作用子类自动的拥有父类的所有属性和方法(父类编写,子类不需要再编写)。代码复用目前私有的属性和方法无法访问。多态的基础。继承语法先定义父......
  • 中国电子学会202406青少年软件编程(Python)等级考试试卷(四级)真题
    青少年软件编程(Python)等级考试试卷(四级)2024-6一、单选题(共25题,共50分)1.执行以下程序后所输出的结果是?()A   20   B   41   C   21   D   912.以下说法错误的是?()A  python中可以在不同的自定义函数中声明相同名字的变量,使用时不会造成数据混乱B......
  • 中国电子学会202403青少年软件编程(Python)等级考试试卷(四级)真题
    202403Python四级真题一、选择题1、运行如下代码,若输入整数3,则最终输出的结果为?()deff(x):    ifx==1:        s=1    else:        s=f(x-1)*x    returnsn=int(input("请输入一个大于1的整数:"))print(f(n)+f(n......
  • Java基本语法
    Java基本语法注释单行注释//多行注释/**/文档注释/***/快捷方法psvm为加入方法sout为输出Shift+Alt+.为放大字体Shift+Alt+,为减小字体标识符号不能用关键字作为变量名或方法名![关键字](file:///C:/Users/15200/Downloads/Screenshot_202......
  • Java免税商品购物商城:Spring Boot实现详解
    第一章绪论1.1课题开发的背景从古至今,通过书本获取知识信息的方式完全被互联网络信息化,但是免税商品优选购物商城,对于购物商城工作来说,仍然是一项非常重要的工作。尤其是免税商品优选购物商城,传统人工记录模式已不符合当前社会发展和信息管理工作需求。对于仓储信息管理......
  • 【JAVA开源】基于Vue和SpringBoot的在线文档管理系统
    本文项目编号T038,文末自助获取源码\color{red}{T038,文末自助获取源码}......
  • 【JAVA开源】基于Vue和SpringBoot的网上超市系统
    本文项目编号T037,文末自助获取源码\color{red}{T037,文末自助获取源码}......
  • 基于JavaWeb的原神游戏商城的设计与实现
    目录博主介绍:......
  • 2025届必看:Java SpringBoot搭建大学生资助管理系统,详解功能模块,实现学生信息高效管理!
    ✍✍计算机毕业编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、微信小程序、大数据实战项目集⚡⚡文末......