Stream流与Lambda表达式(一) 杂谈

一、流 转换为数组、集合

package com.java.design.java8.Stream;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;/*** @author 陈杨*/@SpringBootTest
@RunWith(SpringRunner.class)
public class ListChange {private Stream<String> stream = Stream.of("Kirito", "Asuna", "Illyasviel", "Sakura");@Testpublic void testListChange() {//   将流转换为数组//   System.out.println("-------------将流转换为数组---------------");//   String[] array = stream.toArray(len -> new String[len]);//   String[] array = stream.toArray(String[]::new);//   Arrays.asList(array).stream().forEach(System.out::println);//    将流转换为集合//    System.out.println("-------------将流转换为集合---------------");//    System.out.println("-------Collectors.toList()解析-----------");/*    public static <T>*               Collector<T, ?, List<T>> toList() {*          return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,*                 (left, right) -> { left.addAll(right); return left; },*                 CH_ID);}*///    List<String> list = stream.collect(Collectors.toList());//    List<String> linkedList = stream.collect(LinkedList::new,LinkedList::add,LinkedList::addAll);List<String> list = stream.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);list.forEach(System.out::println);System.out.println(list.getClass());//    System.out.println("-------Collectors.toCollection()解析-----");/*    public static <T, C extends Collection<T>>*        Collector<T, ?, C> toCollection(Supplier<C> collectionFactory) {*              return new CollectorImpl<>(collectionFactory, Collection<T>::add,*             (r1, r2) -> { r1.addAll(r2); return r1; },*              CH_ID);}*///    List<String> list =stream.collect(Collectors.toCollection(ArrayList::new));//    List<String> linkedList =stream.collect(Collectors.toCollection(ArrayList::new));//    Set<String> treeSet =stream.collect(Collectors.toCollection(TreeSet::new));//    Set<String> hashSet =stream.collect(Collectors.toCollection(HashSet::new));}}
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-02-20 15:47:22.310  INFO 1348 --- [           main] com.java.design.java8.Stream.ListChange  : Starting ListChange on DESKTOP-87RMBG4 with PID 1348 (started by 46250 in E:\IdeaProjects\design)
2019-02-20 15:47:22.311  INFO 1348 --- [           main] com.java.design.java8.Stream.ListChange  : No active profile set, falling back to default profiles: default
2019-02-20 15:47:22.947  INFO 1348 --- [           main] com.java.design.java8.Stream.ListChange  : Started ListChange in 0.914 seconds (JVM running for 1.774)
Kirito
Asuna
Illyasviel
Sakura
class java.util.ArrayList

二、集合排序

package com.java.design.java8.Stream;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.*;/*** @author 陈杨*/@SpringBootTest
@RunWith(SpringRunner.class)
public class ComparatorDetail {private List<String> names;@Beforepublic void init() {names = Arrays.asList("Kirito", "Asuna", "Sinon", "Yuuki", "Alice");}public void println() {System.out.println(names);System.out.println("-----------------------------------------\n");}@Testpublic void testComparatorDetail() {//  对名字进行升序排序Collections.sort(names);this.println();//  对名字进行降序排序names.sort(Collections.reverseOrder());this.println();//  按照姓名的字符串长度升序排序 相同长度-->比较前两个字符-->按照字符的ASCII码大小升序排序names.sort(Comparator.comparingInt(String::length).thenComparing(str -> str.charAt(0)).thenComparing(str -> str.charAt(1)));this.println();//  按照姓名的字符串长度降序排序 相同长度-->比较前两个字符-->按照字符的ASCII码大小降序排序names.sort(Comparator.comparingInt(String::length).thenComparing(str -> str.charAt(0)).thenComparing(str -> str.charAt(1)).reversed());this.println();//  按照姓名的字符串长度降序排序 相同长度-->按照字符的ASCII码大小排序(不区分大小写)names.sort(Comparator.comparingInt(String::length).thenComparing(String.CASE_INSENSITIVE_ORDER));this.println();}
}
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-02-20 15:58:39.959  INFO 4588 --- [           main] c.j.d.java8.Stream.ComparatorDetail      : Starting ComparatorDetail on DESKTOP-87RMBG4 with PID 4588 (started by 46250 in E:\IdeaProjects\design)
2019-02-20 15:58:39.962  INFO 4588 --- [           main] c.j.d.java8.Stream.ComparatorDetail      : No active profile set, falling back to default profiles: default
2019-02-20 15:58:40.459  INFO 4588 --- [           main] c.j.d.java8.Stream.ComparatorDetail      : Started ComparatorDetail in 0.729 seconds (JVM running for 1.462)
[Alice, Asuna, Kirito, Sinon, Yuuki]
-----------------------------------------[Yuuki, Sinon, Kirito, Asuna, Alice]
-----------------------------------------[Alice, Asuna, Sinon, Yuuki, Kirito]
-----------------------------------------[Kirito, Yuuki, Sinon, Asuna, Alice]
-----------------------------------------[Alice, Asuna, Sinon, Yuuki, Kirito]
-----------------------------------------

三、Stream之map(Lambda)

package com.java.design.java8.Stream;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;/*** @author 陈杨*/@SpringBootTest
@RunWith(SpringRunner.class)
public class StringOperation {private List<String> list = Arrays.asList("Kirito", "Asuna", "Illyasviel", "Sakura");private List<List<String>> listMap =Arrays.asList(Collections.singletonList("Kirito"), Collections.singletonList("Asuna"),Collections.singletonList("Illyasviel"), Collections.singletonList("Sakura"));private List<List<String>> listFlatMap =Arrays.asList(Collections.singletonList("Kirito"), Collections.singletonList("Asuna"),Collections.singletonList("Illyasviel"), Collections.singletonList("Sakura"));@Testpublic void testStringOperation() {//    集合中 每个字符串  按照排列先后顺序拼接 形成一个长字符串//    String concat =//    list.stream().collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();//    String concat = list.stream().collect(Collectors.joining());//    System.out.println(concat);//    集合中 对每个字符串元素  将所有字母变成大写字母System.out.println("-----------------------------------------\n");List<String> upperCase = list.stream().map(String::toUpperCase).collect(Collectors.toList());upperCase.forEach(System.out::println);//    集合中 对每个字符串元素  将所有字母变成小写字母System.out.println("-----------------------------------------\n");List<String> lowerCase = list.stream().map(String::toLowerCase).collect(Collectors.toList());lowerCase.forEach(System.out::println);System.out.println("-----------------------------------------\n");System.out.println("FlatMap与Map的区别:\n");//    map:  对多个list 分别map Fuction 映射  形成多个listSystem.out.println("-----------------------------------------\n");System.out.println("进行map映射:");List<List<String>> upperMap = listMap.stream().map(list -> list.stream().map(String::toUpperCase).collect(Collectors.toList())).collect(Collectors.toList());upperMap.forEach(System.out::println);//    FlatMap: 对多个list 进行flat扁平化 后再进行map Fuction 映射  形成一个listSystem.out.println("-----------------------------------------\n");System.out.println("FlatMap扁平化进行map映射:");List<String> upperFlatMap = listFlatMap.stream().flatMap(list -> list.stream().map(String::toUpperCase)).collect(Collectors.toList());upperFlatMap.forEach(System.out::println);}
}
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-02-20 15:50:07.423  INFO 8208 --- [           main] c.j.design.java8.Stream.StringOperation  : Starting StringOperation on DESKTOP-87RMBG4 with PID 8208 (started by 46250 in E:\IdeaProjects\design)
2019-02-20 15:50:07.424  INFO 8208 --- [           main] c.j.design.java8.Stream.StringOperation  : No active profile set, falling back to default profiles: default
2019-02-20 15:50:07.917  INFO 8208 --- [           main] c.j.design.java8.Stream.StringOperation  : Started StringOperation in 0.717 seconds (JVM running for 1.5)
-----------------------------------------KIRITO
ASUNA
ILLYASVIEL
SAKURA
-----------------------------------------kirito
asuna
illyasviel
sakura
-----------------------------------------FlatMap与Map的区别:-----------------------------------------进行map映射:
[KIRITO]
[ASUNA]
[ILLYASVIEL]
[SAKURA]
-----------------------------------------FlatMap扁平化进行map映射:
KIRITO
ASUNA
ILLYASVIEL
SAKURA

四、内部迭代与外部迭代

package com.java.design.java8.Stream;import com.java.design.java8.entity.Student;
import com.java.design.java8.entity.Students;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.*;/*** @author 陈杨*/@SpringBootTest
@RunWith(SpringRunner.class)
//迭代本质
public class IterativeEssence {private List<Student> students;@Beforepublic void init() {students = new Students().init();}@Testpublic void testIterativeEssence() {//    需求: select name from students where  age > 14 and addr ="Sword Art Online"  order by id desc ;//    外部迭代System.out.println("-----------------------------------------\n");System.out.println("外部迭代");List<Student> list = new ArrayList<>();for (Student student : students) {if (student.getAge() > 14 && student.getAddr().equals("Sword Art Online")) {list.add(student);}}list.sort(Comparator.comparingInt(Student::getId));for (Student student : list) {System.out.println(student.getName());}//    内部迭代System.out.println("-----------------------------------------\n");System.out.println("内部迭代");students.stream().filter(student -> student.getAge() > 14).filter(student -> student.getAddr().equals("Sword Art Online")).sorted(Comparator.comparingInt(Student::getId)).forEach(student -> System.out.println(student.getName()));//    备注://    内部迭代与SQL语句属于描述性语言//    集合关注的是数据与数据存储//    流关注的是数据的计算//    流中间操作返回的都是Stream对象 泛型取决于中间操作的类型//    流终止操作: 无返回值(forEach) 返回值是其他类型}}
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-02-20 15:53:03.633  INFO 8864 --- [           main] c.j.d.java8.Stream.IterativeEssence      : Starting IterativeEssence on DESKTOP-87RMBG4 with PID 8864 (started by 46250 in E:\IdeaProjects\design)
2019-02-20 15:53:03.640  INFO 8864 --- [           main] c.j.d.java8.Stream.IterativeEssence      : No active profile set, falling back to default profiles: default
2019-02-20 15:53:04.167  INFO 8864 --- [           main] c.j.d.java8.Stream.IterativeEssence      : Started IterativeEssence in 0.746 seconds (JVM running for 1.455)
-----------------------------------------外部迭代
Kirito
Asuna
-----------------------------------------内部迭代
Kirito
Asuna

五、串行流与并行流 简单性能测试

package com.java.design.java8.Stream;import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;/*** @author 陈杨*/@RunWith(SpringRunner.class)
@SpringBootTest
public class ErgodicString {private List<String> uuid;private long startTime;private long endTime;private long parallelEndTime;@Beforepublic void init() {uuid = new ArrayList<>(10000000);IntStream.range(0, 10000000).forEach(i -> uuid.add(UUID.randomUUID().toString()));}public void testNormal() {startTime = System.nanoTime();uuid.stream().sorted().collect(Collectors.toList());endTime = System.nanoTime();long millis = TimeUnit.NANOSECONDS.toMillis(endTime - startTime);System.out.println("单线程" + millis);}public void testParallel() {startTime = System.nanoTime();uuid.parallelStream().sorted().collect(Collectors.toList());parallelEndTime = System.nanoTime();long millis = TimeUnit.NANOSECONDS.toMillis(parallelEndTime - startTime);System.out.println("多线程" + millis);}@Testpublic void testErgodicString() {List<String> list = Arrays.asList("Kirito", "Asuna", "Illyasviel", "Sakura");//  需求: 将数组中每个元素各个字母大写 并放入集合System.out.println("--------------------串行流stream---------------------");// spliterator 分割迭代器//  串行流stream() 单线程处理/**  default Stream<E> stream() {*       return StreamSupport.stream(spliterator(), false);}*///  List<String> collect = list.stream().map(str -> str.toUpperCase()).collect(Collectors.toList());//  R apply(T t); toUpperCase() 没有参数作为输入//  但把调用toUpperCase的对象作为T作为输入 返回的R是return的对象结果//  List<String> collect = list.stream().map(String::toUpperCase).collect(Collectors.toList());Function<String, String> function = String::toUpperCase;//等价于 (String str)  -> str.toUpperCase()//方法引用 类的类型::实例方法 对应的lambda表达式 第一个输入参数 是调用此方法的对象List<String> collect = list.stream().map(function).collect(Collectors.toList());collect.forEach(System.out::println);this.testNormal();System.out.println("-----------------并行流parallelStream------------------");//  并行流parallelStream() 多线程处理/**  default Stream<E> parallelStream() {*       return StreamSupport.stream(spliterator(), true);}*/List<String> parallelCollect = list.parallelStream().map(str -> str.toUpperCase()).collect(Collectors.toList());parallelCollect.forEach(System.out::println);this.testParallel();}}
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-02-20 15:54:54.321  INFO 7356 --- [           main] c.j.design.java8.Stream.ErgodicString    : Starting ErgodicString on DESKTOP-87RMBG4 with PID 7356 (started by 46250 in E:\IdeaProjects\design)
2019-02-20 15:54:54.323  INFO 7356 --- [           main] c.j.design.java8.Stream.ErgodicString    : No active profile set, falling back to default profiles: default
2019-02-20 15:54:54.817  INFO 7356 --- [           main] c.j.design.java8.Stream.ErgodicString    : Started ErgodicString in 0.705 seconds (JVM running for 1.528)
--------------------串行流stream---------------------
KIRITO
ASUNA
ILLYASVIEL
SAKURA
单线程10590
-----------------并行流parallelStream------------------
KIRITO
ASUNA
ILLYASVIEL
SAKURA
多线程3313

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

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

相关文章

一年java工作经验-面试总结

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

linux mysql python包_03_mysql-python模块, linux环境下python2,python3的

---恢复内容开始---1、Python2 正常[rootIP ~]#pip install mysql-pythonDEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont be maintained after that date. A future version of pip will drop …

两年Java工作经验应该会些什么技术

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

centos 6 mysql 5.7.13 编译安装_Centos 6.5 下面 源码编译 安装 Mysql 5.7.13

安装软件依赖包yum -y install gcc gcc-c ncurses ncurses-devel cmake下载软件包cd /usr/local/srcwget https://downloads.mysql.com/archives/get/file/mysql-5.7.13.tar.gz --no-check-certificate下载 boost 库&#xff0c;MySQL 5.7.5 开始Boost库是必需的cd /usr/loca…

LeetCode 237. 删除链表中的节点(Python3)

题目&#xff1a; 请编写一个函数&#xff0c;使其可以删除某个链表中给定的&#xff08;非末尾&#xff09;节点&#xff0c;你将只被给定要求被删除的节点。 现有一个链表 -- head [4,5,1,9]&#xff0c;它可以表示为: 示例 1: 输入: head [4,5,1,9], node 5 输出: [4,1,9…

一年Java经验应该会些什么

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

mysql查询各类课程的总学分_基于jsp+mysql的JSP学生选课信息管理系统

运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。IDE环境&#xff1a; Eclipse,Myeclipse,IDEA都可以硬件环境&#xff1a; windows 7/8/10 2G内存以上(推荐4G&#xff0c;4G以上更好)可以实现&#xff1a; 学生&#xff0c;教师角色的…

三年java经验应该会什么?

*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程 请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更…

python加法运算符可以用来连接字符串并生成新字符串_中国大学MOOCPython语言入门网课答案...

中国大学MOOCPython语言入门网课答案表达式int(40.5)的值为____________。表达式160.5的值为____________________。python程序只能使用源代码进行运行&#xff0c;不能打包成可执行文件。python语句list(range(1,10,3))执行结果为___________________。pip命令也支持扩展名为.…

全是满满的技术文档

*************************************话不多说-先上教程 ********************************** 完整躺赚教程(不需任何技术,照做就能赚钱):点击此处获取 提取码&#xff1a;6666 被动收入教程(需要一定的技术,会搭建服务器,会发布项目<教程里面会教你>):点击此处获取 提…

JavaScript面试的完美指南(开发者视角)

2019独角兽企业重金招聘Python工程师标准>>> 摘要&#xff1a; 面试季手册。 原文&#xff1a;javascript 面试的完美指南(开发者视角)作者&#xff1a;前端小智Fundebug经授权转载&#xff0c;版权归原作者所有。 为了说明 JS 面试的复杂性&#xff0c;首先&#x…

windows qt 不能debug_linux配置vlc-qt

vlc-qt 是基于vlc库&#xff0c;用于开发音频视频应用&#xff0c;性能优秀。vlc-qt/vlc-qt​github.com使用vlc-qt首先需要编译vlc-qt &#xff08;windows可以下载使用编译好的&#xff0c;但是只能用在release模式&#xff09;&#xff08;在windows系统中&#xff09;使用w…

idou老师教你学Istio 27:解读Mixer Report流程

1、概述 Mixer是Istio的核心组件&#xff0c;提供了遥测数据收集的功能&#xff0c;能够实时采集服务的请求状态等信息&#xff0c;以达到监控服务状态目的。 1.1 核心功能 •前置检查&#xff08;Check&#xff09;&#xff1a;某服务接收并响应外部请求前&#xff0c;先通过E…

mysql删除密码代码_mysql 用户新建、受权、删除、密码修改

mysql 用户新建、授权、删除、密码修改首先要声明一下&#xff1a;一般情况下&#xff0c;修改MySQL密码&#xff0c;授权&#xff0c;是需要有mysql里的root权限的。注&#xff1a;本操作是在WIN命令提示符下&#xff0c;phpMyAdmin同样适用。用户&#xff1a;phplamp 用户数…

KindEditor 上传漏洞致近百个党政机关网站遭植入

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> 2月21日消息&#xff0c;近日&#xff0c;安恒明鉴网站安全监测平台和应急响应中心监测发现近百起党政机关网站被植入色情广告页面&#xff0c;分析发现被植入色情广告页面的网站都…

Insql 1.8.2 发布,轻量级 .NET ORM 类库

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> Insql 是一个轻量级的.NET ORM 类库。对象映射基于 Dapper, Sql 配置灵感来自于 Mybatis。 TA 的追求&#xff1a;简洁、优雅、性能与质量 TA 的宗旨&#xff1a;让你用起来感觉到…

教程 | 如何利用C++搭建个人专属的TensorFlow

在开始之前&#xff0c;首先看一下最终成型的代码&#xff1a; 分支与特征后端&#xff08;https://github.com/OneRaynyDay/autodiff/tree/eigen&#xff09;仅支持标量的分支&#xff08;https://github.com/OneRaynyDay/autodiff/tree/master&#xff09;这个项目是我与 Min…

docker kali安装mysql_kali安装docker(有效详细的教程) ——vulhub漏洞复现 001

前记&#xff1a;博主有着多次安装docker的丰富经验&#xff0c;曾经为了在kali成功安装docker花费不少时间。在kali2016.3一直到最新的kali2019.4都通吃&#xff01;所以跟着下面的步骤走&#xff0c;绝对不会出错。(该机子此前没装过docker&#xff0c;并且配置好了kali更新源…

PDF文件如何转成markdown格式

百度上根据pdf转makrdown为关键字进行搜索&#xff0c;结果大多数是反过来的转换&#xff0c;即markdown文本转PDF格式。 但是PDF转markdown的解决方案很少。 正好我工作上有这个需求&#xff0c;所以自己实现了一个解决方案。 下图是一个用PDF XChange Editor打开的PDF文件&am…

kangle支不支持PHP_【转载】PHP调用kangle的API

摘要&#xff1a;根据管理的API公布写了一个类封装了一个操作集合&#xff0c;这是一个kangleAPI的一个封...根据管理的API公布写了一个类封装了一个操作集合&#xff0c;这是一个kangleAPI的一个封装吧&#xff0c;是在其他地方看到的&#xff0c;接口包含获取easypanel的信息…