Java学习笔记(20)

可变参数

输入的参数数量不确定

底层就是把输入的参数放进一个数组里

  1. 只能写一个可变参数
  2. 如果还有其他形参,可变参数要放在最后写

可变参数在底层就是一个数组

Collections

Addall shuffle

练习

package exercise;import java.util.ArrayList;
import java.util.Collections;public class exercise1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "11", "22", "#3", "33", "44", "55");for (int i = 0; i < 5; i++) {Collections.shuffle(list);System.out.println("第" + i + "轮:");System.out.println(list);}}
}

package exercise;import java.util.*;
import java.util.function.BiConsumer;public class exercise2 {public static void main(String[] args) {HashMap<String, ArrayList<String>> hm = new HashMap<>();ArrayList<String> city1 = new ArrayList<>();ArrayList<String> city2 = new ArrayList<>();ArrayList<String> city3 = new ArrayList<>();Collections.addAll(city1, "南京市", "扬州市", "苏州市", "无锡市", "常州市");Collections.addAll(city2, "武汉市", "孝感市", "十堰市", "宜昌市", "鄂州市");Collections.addAll(city3, "石家庄市", "唐山市", "邢台市", "保定市", "张家口市");hm.put("江苏省", city1);hm.put("湖北省", city2);hm.put("河北省", city3);hm.forEach(new BiConsumer<String, ArrayList<String>>() {@Overridepublic void accept(String s, ArrayList<String> strings) {StringJoiner sj = new StringJoiner(",","","");for (String city : strings) {sj.add(city);}System.out.println(s + " = " + sj);}});}}

创建不可变集合

不可以被修改的集合

不能改长度,改内容

只能查询

List.of

Set.of里面如果有重复的元素,就会报错

Map.of

参数是有上限的,最多传10个
为什么有上限?

因为map.of参数里传的是一个键,一个值,一个键一个值这样,如果想要写成可变参数,如下面,第一个参数传键的可变参数,第二个传值的可变参数是不行的。因为参数里只允许有一个可变参数,并且传入参数有多个的话,可变参数要放在最后。

所以没法这样写

为了可以传多个键值对,就可以使用map.ofEntries,传递entry对象的可变参数

传多个Entry对象,就可以把多个entry对象放在数组array里

那怎么放?

首先从hashmap中获取所有entry对象的集合set(entryset()方法)

再新建一个entry的数组用于存放

调用entry对象集合的toArray方法,传入参数就是上面建立的entry数组,返回的就是一个装满entry对象的数组

就可以把这个数组放到map.ofEntries的传入参数里,就得到一个不可以修改的map

嫌麻烦?

一行代码

记不住?

直接用

Copyof  JDK10才出现

如果传入的是不可变的map,直接返回

如果不是,则给你转成一个不可变的map

Stream流

单列集合

Arraylist是collection的实现类,继承了里面的stream方法

双列集合

数组

用的是Arrays里面的steam方法

对零散数据使用stream的静态方法Stream.of

要求:数据得是相同类型的

Stream.of在底层其实使用的是Arrays.stream()

注意,如果用stream.of如果传递的是引用数据类型的数组,则可以用

传递基本数据类型的数组,会把数组当做一个元素,返回的是数组的地址值

用包装类就可以实现了

Stream流的中间方法

Filter limit skip distinct concat map

Stream流只能用一次

不会改变原来的集合内容

Distinct 底层是通过new一个hashset来去重的;如果元素是自定义对象,要重写hashcode和equals

.map方法

Lambda表达

Stream终结方法

注意:tolist()不是终结方法

Toarray()是终结方法

收集方法

.collect

Tolist:会把数据放到arraylist中

Toset:会把数据放到hashset中

注意:收集到map里的数据,键不能重复,否则报错

应该收集到一个hashmap中

Lambda写法

ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> list1 = list.stream().filter(i -> i % 2 == 1).toList();System.out.println(list1);//[1, 3, 5, 7, 9]

ArrayList<String> list2 = new ArrayList<>();Collections.addAll(list2, "zhangsan, 23", "lisi, 24", "wangwu, 25");Map<String, Integer> map = list2.stream().filter(s -> Integer.parseInt(s.split(", ")[1]) >= 24).collect(Collectors.toMap(s -> s.split(", ")[0], i -> Integer.parseInt(i.split(", ")[1])));System.out.println(map);//{lisi=24, wangwu=25}

 //1.创建两个ArrayList集合ArrayList<String> manList = new ArrayList<>();ArrayList<String> womenList = new ArrayList<>();//2.添加数据Collections.addAll(manList, "蔡坤坤,24", "叶齁咸,23", "刘不甜,22", "吴签,24", "谷嘉,30", "肖梁梁,27");Collections.addAll(womenList, "赵小颖,35", "杨颖,36", "高元元,43", "张天天,31", "刘诗,35", "杨小幂,33");Stream<String> stream1 = manList.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);Stream<String> stream2 = womenList.stream().filter(s -> s.startsWith("杨")).skip(1);List<Actor> list3 = Stream.concat(stream1, stream2).map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]))).toList();System.out.println(list3);//[Actor{name = 蔡坤坤, age = 24}, Actor{name = 叶齁咸, age = 23}, Actor{name = 杨小幂, age = 33}]

方法引用

方法引用的分类

引用静态方法

Integer::parseInt

引用成员方法

用this和super引用需要注意:如果当前类是静态static的,则没得用,因为static方法里是没有this的

如果要用,只能先创建本类的对象,再去调用本类的方法

引用构造方法

自己在对象类重写一个构造方法和抽象方法一致,但不需要管返回值,因为构造方法生成的对象和抽象方法的返回值相同就行。

其他调用方式

使用java类名引用成员方法

有局限性

引用数组的构造方法

//1.创建两个ArrayList集合ArrayList<String> manList = new ArrayList<>();//2.添加数据Collections.addAll(manList, "蔡坤坤,24", "叶齁咸,23", "刘不甜,22", "吴签,24", "谷嘉,30", "肖梁梁,27");Actor[] array = manList.stream().map(Actor::new).toArray(Actor[]::new);System.out.println(Arrays.toString(array));//[Actor{name = 蔡坤坤, age = 24}, Actor{name = 叶齁咸, age = 23},// Actor{name = 刘不甜, age = 22}, Actor{name = 吴签, age = 24},// Actor{name = 谷嘉, age = 30}, Actor{name = 肖梁梁, age = 27}]

String[] array1 = Arrays.stream(array).map(Actor::getName).toArray(String[]::new);System.out.println(Arrays.toString(array1));//[蔡坤坤, 叶齁咸, 刘不甜, 吴签, 谷嘉, 肖梁梁]

manList.stream().map(new exercise3()::method2).toList().forEach(System.out::println);//蔡坤坤-24//叶齁咸-23//刘不甜-22//吴签-24//谷嘉-30//肖梁梁-27public String method2(String s) {return s.split(",")[0] + "-" + s.split(",")[1];}

String[] array2 = Arrays.stream(array).map(Actor::method2).toArray(String[]::new);
System.out.println(Arrays.toString(array2));
//[蔡坤坤-24, 叶齁咸-23, 刘不甜-22, 吴签-24, 谷嘉-30, 肖梁梁-27]public static String method2(Actor a) {return a.getName() + "-" + a.getAge();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/282586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递增四元组

解法&#xff1a; 首先都可以想到dp[i]&#xff1a;第i个元素结尾的递增四元组有dp[i]个 然后发现有一组数据&#xff1a;2,3,6,1,5,8。会出现6结尾和5结尾的递增三元组&#xff0c;也就是未来的决策受过去影响&#xff0c;专业的说就是有后效性。需要强化约束条件&#xff0…

1.2 编译型语言和解释型语言的区别

编译型语言和解释型语言的区别 通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要想执行&#xff0c;必须先转换成二进制指令。 所谓二进制指令&…

使用gimp制作头像

1.裁剪图像 &#xff08;1&#xff09;用GIMP打开图像。 &#xff08;2&#xff09;在工具箱中选中剪裁工具。 &#xff08;3&#xff09;在工具箱下边的工具选项中&#xff0c;勾选 固定→宽高比&#xff0c;并在下面的数值框中输入1:1。 &#xff08;4&#xff09;在图像中…

ginblog博客系统/golang+vue

ginblog博客系统 前台&#xff1a; 后台&#xff1a; Gitee的项目地址&#xff0c;点击进入下载 注意&#xff1a; 数据库文件导入在model里面&#xff0c;直接导入即可。 admin和front前后台系统记住修改https里的地址为自己的IP地址&#xff1a; front同上。

Springboot+vue的大学生选修选课系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的大学生选修选课系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;control…

显卡基础知识及元器件原理分析

显卡应该算是是目前最为火热的研发方向了&#xff0c;其中的明星公司当属英伟达。 当地时间8月23日&#xff0c;英伟达发布截至7月30日的2024财年第二财季财报&#xff0c;营收和利润成倍增长&#xff0c;均超市场预期。 财报显示&#xff0c;第二财季英伟达营收为135.07 亿美…

第十四届蓝桥杯JavaB组省赛真题 - 阶乘求和

/ 10^9考虑前九位&#xff0c;% 10^9保留后9位 解题思路: 求获取结果的后九位数字&#xff0c;需要对10^9取余&#xff0c;因为202320232023这个数字的阶乘太大&#xff0c;必须要减少计算量&#xff0c;因为当一个整数乘以10^9后对其取余&#xff0c;那么结果都为0。 所以我…

模拟B\S服务器(扩展知识点)

3.2 模拟B\S服务器(扩展知识点) 模拟网站服务器&#xff0c;使用浏览器访问自己编写的服务端程序&#xff0c;查看网页效果。 案例分析 准备页面数据&#xff0c;web文件夹。 复制到我们Module中&#xff0c;比如复制到day08中 我们模拟服务器端&#xff0c;ServerSocket类…

【C++ leetcode】双指针问题

1. 611. 有效三角形的个数 题目 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 画图 和 文字 分析 判断是否是三角形要得到三边&#xff0c;由于遍历三边要套三层循环&#x…

VC++ error C1001: 内部编译器错误 c\error.h”,第 1291 行) 原因和解决

原因是使用模板时实现方法没写分号 #include <iostream>template <class T> class A { public:A() {};~A() {};void GetName() {return}; };int main(int argc, char* argv[]) {return 0; }

ARM 点灯

实现三个LED灯灰 .text .global _start _start: 使能GPIOE GPIOF的外设时钟 RCC_MP_AHB4ENSETR的第[4][5]设置为1即可使能GPIOE GPIOF时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) …

Python Flask框架 -- 加载静态文件

在项目中&#xff0c;一般都会把静态文件放在 static 目录下&#xff0c;如 images、css、js 等&#xff0c;html 放在 templates 目录下。 .py&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route(/static) def static_demo():return rend…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(时间滑动选择器弹窗)

以24小时的时间区间创建时间滑动选择器&#xff0c;展示在弹窗上。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&…

matlab simulink 二自由度机器手臂

1、内容简介 略 73-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

SQLiteC/C++接口详细介绍之sqlite3类(十六)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十五&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍之sqlite3类&#xff08;十七&#xff09;&#xff08;未发表&#xff09; 50.sqlite…

MySQL数据库-MySQL基础-下篇-函数、约束、多表查询、事务

文章目录 函数一、字符串函数练习 二、数值函数三、日期函数四、流程函数总结 约束概述约束演示外键约束概念语法删除/更新行为 总结 多表查询多表关系一对多&#xff08;多对一&#xff09;多对多一对一 多表查询概述内连接外连接自连接*联合查询-union, union all子查询标量子…

LeetCode # 199. 二叉树的右视图

199. 二叉树的右视图 题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3…

js实现hash路由原理

一、简单的上下布局&#xff0c;点击左侧导航&#xff0c;中间内容跟对变化&#xff0c;主要技术使用js检测路由的onhashchange事件 效果图 二、话不多说&#xff0c;直接上代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"…

操作系统面经-什么是操作系统?

通过以下四点可以概括操作系统到底是什么&#xff1a; 操作系统&#xff08;Operating System&#xff0c;简称 OS&#xff09;是管理计算机硬件与软件资源的程序&#xff0c;是计算机的基石。操作系统本质上是一个运行在计算机上的软件程序 &#xff0c;主要用于管理计算机硬…

【Unity】获取游戏对象或组件的常用方法

前言 在Unity开发过程中&#xff0c;我们经常需要获取组件&#xff0c;那么在Unity里如何获取组件呢&#xff1f; 一、获取游戏对象 1.GameObject.Find GameObject.Find 是通过物体的名称获取对象的 所以会遍历当前整个场景&#xff0c;效率较低 而且只能获取激活状态的物体…