当前位置: 首页 > news >正文

Stream和Collections工具类

 Stream流

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、聚合等。

    public static void main(String[] args){List<String> list =new ArrayList<>(Arrays.asList("aaaa","Saaaa","Saaaa","xx","Xss","Lxxx"));//删除长度不大于3的字符串//删除首字母不为大写的字母//去掉重复的字符串list=list.stream().filter(str ->str.length()>3) //保留的条件.filter(str ->str.charAt(0)>='A'&&str.charAt(0)<='Z').distinct()  //去重,用equals判断.collect(Collectors.toList());System.out.println(list);List<Integer>collect=list.stream().map(String::length).collect(Collectors.toList());System.out.println(collect);}
//输出[Saaaa, Lxxx]
//[5, 4]

不能认为每一步是直接依次执行的。Stream会先记录每一步操作,而不是直接开始执行内容,当整个链式调用完成后,才会依次执行,也就是说需要的时候,工厂的机器才会按照预定的流程启动。

生成随机数:

    public static void main(String[] args){Random random=new Random();random.ints(-100,100).limit(10).filter(i -> i<0) //只保留小于0的数字.sorted()  //默认从小到大排序.forEach(System.out::println);}

Collections工具类

Arrays是一个用于操作数组的工具类

Collections类是专用于集合的工具类

常用方法:

    public static void main(String[] args){List list1=new ArrayList<>(Arrays.asList(1,4,5,2,9,0));//求最大值最小值Collections.max(list1);Collections.min(list1);//对集合进行二分搜索(注意:集合的具体类型必须是实现Comparable接口的类)Collections.sort(list1);System.out.println(Collections.binarySearch(list1,4));
//输出3//对集合的元素进行快速填充,注意这个填充是对集合中的已有元素进行覆盖//如果集合中本身没有元素,那么fill操作不会生效Collections.fill(list1,0);System.out.println(list1);
//输出[0, 0, 0, 0, 0, 0]//emptyXXX快速生成一个只读的空集合List<Integer>list2=Collections.emptyList();//Collections.singletonList()会生成一个只有一个元素的Listlist2.add(10); //不支持,会直接抛出异常//将一个可修改的集合变成只读的集合:List<Integer>list3=new ArrayList<>(Arrays.asList(1,3,3,24));List<Integer>newList=Collections.unmodifiableList(list3);newList.add(10); //不支持,会抛出异常//寻找子集合的位置System.out.println(Collections.indexOfSubList(list3,Arrays.asList(3,3)));
//输出1}

由于泛型机制上的一些漏洞,实际上对应类型的集合类有可能会存放其他类型的值,泛型的检查值存在于编译阶段,我们只要绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这些问题就是在运行时进行类型检查:

    public static void main(String[] args){List list1=new ArrayList<>(Arrays.asList(1,4,5,2,9,0));list1=Collections.checkedList(list1,Integer.class);list1.add("aaa");System.out.println(list1);}
//在输出时会报错

http://www.xdnf.cn/news/304831.html

相关文章:

  • 多行文本省略
  • oceanbase不兼容SqlSugarCore的问题
  • 【KWDB创作者计划】_通过一篇文章了解什么是 KWDB(KaiwuDB)
  • JMeter_配置元件之随机变量(RandomVariable)介绍
  • 手撕算法(1)
  • 使用 Spring Boot 构建 REST API
  • SpringBoot教学管理平台源码设计开发
  • leetcode 24. 两两交换链表中的节点
  • 分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践
  • 简说Policy Gradient (1) —— 入门
  • [蓝桥杯 2025 省 B] 水质检测(暴力 )
  • python--------修改桌面文件内容
  • 第2章 神经网络的数学基础
  • 神经网络之激活函数:解锁非线性奥秘的关键
  • Linux开发工具【上】
  • 2025年LangChain(V0.3)开发与综合案例
  • 接口自动化工具如何选择?以及实战介绍
  • windows操作系统开机自启(自动启动) 运行窗口 shell:startup 指令调出开机自启文件夹
  • 驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域绘制
  • 使用原生javascript手动实现一个可选链运算符
  • [论文阅读]MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System
  • 【Spring Boot 注解】@Configuration与@AutoConfiguration
  • vue2项目中使用pag格式动图
  • GMRES算法处理多个右端项的Block与PseudoBlock变体
  • 【已解决】Neo4j Desktop打不开,不断网解决
  • 一种基于条件生成对抗网络(cGAN)的CT重建算法
  • Hadoop架构再探讨
  • keil+vscode+腾讯ai助手
  • 【prometheus+Grafana篇】基于Prometheus+Grafana实现Linux操作系统的监控与可视化
  • 【程序员AI入门:基础】5.提示工程怎么释放LLM的潜力