前言 想必大家编写代码时肯定和我一样,也遇到过汉字乱码的问题。特别是,有时候和上下游对接接口,不能统一编码格式的话,一堆乱码问题,让人头皮发麻。 那么为什么会有这么多的乱码问题? 什么是字符编码?...等我下次需要查看的时候,根据对应关系把它解出来就可以了。 上边的两个过程就对应字符的编码和解码过程。 字符编码就是把字符按一定的规则,转换成数字。字符解码是编码的逆过程,即把数字按规则转换成字符。...那结果肯定不用说了,我把 0001 1011 这串数字给他之后,按照他的编码规则来解,肯定是 &$#!这样的东西。 所以,乱码问题说到底,就是编码和解码的规则对应不上导致的。...细心的同学可能发现了,我上边转换的汉字可以用 char 类型来存储,这是为什么呢? 这是因为,在 Java 中,默认使用的字符集就是 Unicode,可以容纳 100 多万个字符,其中就包括汉字。...总结 最后,来解答下文章开头的问题。 乱码的问题,究其根本原因,其实是编码和解码时的规则不一样导致的。 字符编码和字符集是两个不同的概念。
好久没练习写程序了 最近忙活一个小项目,我的任务是通过某接口调用一些数据,一条条调用肯定是慢了,所以我写了个爬虫。...value in m.items(): dt[key] = value print(dt['coastTime']) 主要遇到两个问题 第一个字符串数据的累加...第二个问题返回数据列表里包含字典 形如[{‘a’:‘1’}]形式 用遍历items形式把每一项取出来再打印
2 Serializable接口起什么作用呢? 起到 标识 的作用,标志的作用,java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊待遇。...Serializable这个标志接口是给java虚拟机参考的,java虚拟机看到这个接口之后,会为该类自动生成一个序列化版本号。 3 序列化版本号有什么用呢? 区分两个类是否相同。...4 java语言中是采用什么机制来区分类的? 第一:首先通过 类名 进行比对,如果类名不一样, 肯定不是同一个类。 第二:如果类名一样,再怎么进行类的区别? 靠 序列化版本号 进行区分。 eg....对于java虚拟机来说,java虚拟机是可以区分开这两个类的,因为这两个类都实现了Serializable接口,都有默认的序列化版本号,他们的序列化版本号不一样。所以区分开了。...6 结论 凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号。 这样,以后这个类即使代码修改了,但是版本号不变,java虚拟机会认为是同一个类。
接口强行对实现它的每个类的对象进行整体排序。...这种排序被称为类的自然排序。...实现 Comparable 的类必须实现 compareTo(Object obj)方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。...如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。...实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口。...ps(为什么函数式接口中只有一个抽象方法:因为在Lambad表达式中并没有指定方法名字(所以函数式接口中的方法只能有一个)) 在java中Lambad表示式是对象,他们必须依附于一类特别的对象函数——...(student.getScore())); //2.引用名(对象名)::实类方法名。...list.sort(Student::compareByScore); //4.构造方法引用:类名::new Stream(流) 流由3部分构成: 源 零个或多个中间操作:中间操作都会返回一个...终止操作:终止操作则不会返回Stream类型,可能不返回值,也可能返回其他类型的单个值。
2.函数接口指的是只有一个抽象方法的接口,被当做是lambda表达式的类型。最好使@FunctionalInterface 注解,防止其他人在里面添加方法。...只需要在想要执行的地方利用传递的对象调用对应的接口中唯一的方法即可。...Optional对象orElse方法为如果有值就返回值,没有返回给定的值。...-> System.out.println(student.getScore())); 这里非常奇怪,sort方法接收的lambda表达式不应该是两个参数么,为什么这个实例方法只有一个参数也满足了lambda...结合本例来看,最初的lambda表达式是这样的 students.sort((o1, o2) -> o1.getScore() - o2.getScore()); 那使用 类名::实例方法名 方法引用时
a); } 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class... X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该如何同时实现这两个接口拉?...解决办法是把其中的不能重载的方法直接写成接口的方法,同时要注意这个方法只能由接口调用,不能声明为Public类型的.所以X的定义如下: public class X:IA,IB { public... { Console.WriteLine("IB.GetA"); return 12; } } 同样如果有更多的同名同参不同返回值的接口,也可以通过"接口名....函数名"的形式实现.
静态代码块:在类加载时执行。 匿名内部类: 一种无需显式声明类名的内部类,常用于简化代码和实现接口。...第一章:API文档 API文档是程序员的“字典”,它详细描述了Java中预定义的类和接口,以及它们的方法和属性,方便我们查询和使用。 第二章:异常 1....()的参数对象)小于0 返回负整数 this对象(调用compareTo方法的对象)减 指定对象(传入compareTo()的参数对象)等于0 返回零 代码示例: public class Student...没有实现Comparable接口,而这个类你又不方便修改(例如:一些第三方的类,你只有.class文件,没有源文件),那么这样类的对象也要比较大小怎么办?...o1对象减o2大于0返回正整数 o1对象减o2小于0返回负整数 o1对象减o2等于0返回零 public class Student implements Comparator { private
表示直接引用已有Java类或对象的方法或构造器。...简单来讲,我们需要实现Compartor接口的compare方法,这个方法有两个参数用于比较,返回1代表前者大于后者,返回0代表前者等于后者,返回-1代表前者小于后者。...第二个参数可以简单理解为“应该如何计算,累加还是累乘”的计算模型。最难理解的是第三个参数,因为前两个参数类型看起来已经能满足我们的需求,为什么还有第三个参数呢?...它接收一个Comparator对象,Java8对Comparator接口提供了新的静态方法comparing,这个方法返回Comparator对象,以前我们需要手动实现compare比较,现在我们只需要调用...最大的功劳当属Java8新提供的类——Collectors收集器。 Collectors不但有toList方法能将流转换为集合,还包括toMap转换为Map数据类型,还能分组。
上节我们介绍了Lambda表达式和函数式接口,本节探讨它们的应用,函数式数据处理,针对常见的集合数据处理,Java 8引入了一套新的类库,位于包java.util.stream下,称之为Stream API...基本概念 接口Stream类似于一个迭代器,但提供了更为丰富的操作,Stream API的主要操作就定义在该接口中。...,而传统代码是命令式的,需要一步步的操作指令 流畅式接口,方法调用链接在一起,清晰易读 基本转换 根据学生列表返回名称列表,传统上的代码一般是这样: List nameList = new...super T> comparator) 它们都对流中的元素排序,都返回一个排序后的Stream,第一个方法假定元素实现了Comparable接口,第二个方法接受一个自定义的Comparator。...java.util.Optional是Java 8引入的一个新类,它是一个泛型容器类,内部只有一个类型为T的单一变量value,可能为null,也可能不为null。Optional有什么用呢?
, 而函数式接口在Java中是指: 有且仅有一个抽象方法的接口 只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导 举例: 定义了三个接口, 利用lambda去实现相关功能...注意: 要引用的方法的参数和返回值要和接口中定义的一致 举例: 使用上面实现过的接口来实现引用 /** * Author TimePause * Create 2020-05-03 22:...PersonMake lambda1=Person::new; PersonMake2 lambda2 = Person::new; } } //定义一个实体类两个接口, 分别测试...0; i < persons.length; i++) { System.out.println(persons[i]); } } } //定义一个实体类两个接口...int,此时这个方法的返回值不再是Stream * 此时这个方法的返回值不再是Stream而是IntStream */ double
一、从大雄的零分试卷说起 为了缅怀一下我逝去的童年,这两天我又翻出了《猫和老鼠》、《哆啦A梦》等童年经典。在回顾蓝胖子的过程中,大雄的零分试卷可谓是出镜率最高的东西。...对于大雄的零分试卷,老师、妈妈和大雄的不同表现总能让人捧腹大笑,但同时也能勾起自己曾经考砸了的回忆。...其类图结构如下所示: 在上面的类图中可以看到访问者模式中有以下两个重要的角色: AbstractVisitor :抽象访问者,将对于不同元素的数据操作都集成在访问者当中,元素本身不需要关注除了数据结构以外的任何事情...一个小例子 这里以大雄的零分试卷作为背景写一个简答易懂的小例子: 抽象访问者类 /** * 抽象访问者 * * @author brucebat * @version 1.0 * @since...()) && 0 == examinePaper.getScore()) { System.out.println("妈妈:不把你打的满脸桃花开,你怕是不知道花儿为什么这么红")
returnType 表示方法的返回值类型; parameter_list 表示参数列表,在接口中的方法是没有方法体的 三、使用接口的注意事项 接口对于其声明、变量和方法都做了许多限制...Student,在该抽象类中有stuID,name,score,weight四个属性和getscore()抽象方法,该抽象方法的方法体为空,并分别定义三个参数和四个参数的构造方法,传入值。...2)定义一个小学生类Pupil,该类继承Student,定义一个getname()方法获取学生的姓名和学号,并重写getscore抽象方法,直接输出学生的score。...3)定义一个大学生类Undergraduate,定义一个getname()方法获取学生的姓名和学号,该类继承Student,并重写getscore抽象方法,输出大学生的权值成绩,即score*weight...4)最后创建一个Test类,分别创建Pupil和Undergraduate类的对象,并调用getname()和getscore()方法。 编辑:玥怡居士|审核:世外居士
而e1是一个正常的匿名类的对象. 通过对比, 可以说 lambda的表达式其实是接口的实现的“另一种方式”。这种方式更加简洁,更容易阅读。...除了代码层面的简洁外,在编译的结果时候lambda也不会产生一个多余的匿名类。 对于eat这个特殊的接口,称之为:函数式接口 ---- ---- lamda的优点 ---- 代码缩减 ?...2.返回不为空的对象 ? 3.多重if else的简化 ? ---- ---- 函数式接口 什么是函数式接口?...反思:函数式接口NameCheckInterface,是不是可以用来表示所有返回值为bool类型的,有两个形参(类型是passager 和String类型)的lambda表达式?...: 1234455 为什么会有这个输出呢?
我们不需要去记哪些方法是惰性求值,如果方法的返回值是Stream那么它代表的就是惰性求值。如果返回另外一个值或空,那么它代表的就是及早求值。...例如在java.util.stream.ReferencePipeline抽象类中有对Stream接口collect的实现,方法由final修饰,不在支持重写。...”,也就是返回true的时候保留,返回false排除 /** * 通过Stream filter筛选出分数大于60分的学生集合 * * @param students 待过滤的学生集合...Java8对Comparator接口提供了新的静态方法comparing,这个方法返回Comparator对象,以前我们需要手动实现compare比较,现在我们只需要调用Comparator.comparing...最大的功劳当属Java8新提供的类——Collectors收集器。
动机 std::map的insert方法返回std::pair,两个元素分别是指向所插入键值对的迭代器与指示是否新插入元素的布尔值,而std::map零初始化的过程是多余的;•也许根本没有可用的默认构造函数,如std::ofstream。...也就是说,方括号前面的修饰符都是作用于e的,而不是那些新声明的变量。至于为什么第一条会独立出来,这是因为在标准C++中第二条的形式不能用于数组拷贝。...::type,则结构化绑定vi的类型是Ti的引用;当get返回左值引用时是左值引用,否则是右值引用;被引类型为Ti;——decltype对结构化绑定有特殊处理,产生被引类型,在类元组情形下结构化绑定的类型与被引类型是不同的...至此,我想“结构化绑定”的意义已经明确了:标识符总是绑定一个对象,该对象是另一个对象的成员(或数组元素),后者或是拷贝或是引用(引用不是对象,意会即可)。
线性存储ArrayList 类【数组序列】实现了 List 接口,内部使用 Object 数组存储:可以高效地按索引进行元素修改和查询。...添加元素时动态扩容:当容量满后,ArrayList 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。...类【链表序列】实现了 List 和 Deque 接口。...添加元素时动态扩容:当容量满后,ArrayDeque 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。...添加元素时动态扩容:当容量满后,PriorityQueue 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。
Stream 类的静态 of() 方法创建流。 清单 1....流接口 下面是一张 Stream 的 UML (统一建模语言) 类图,后文会讲解其中的一些关键方法。 图 1. Stream UML 类图 ? 图 1....Stream UML 类图 BaseStream 接口 从上面的 UML 图可以看出来 BaseStream 接口是 Stream 流最基础的接口,它提供了所有流都可以使用的基本功能。....mapToDouble(Student::getScore) .sum(); flatMap() flatMap() 操作能把原始流中的元素进行一对多的转换,并且将新生成的元素全都合并到它返回的流里面...Collectors 类的源码。
Stream 是 Java8 新增的一个接口,允许以声明性方式处理数据集合。Stream 不是一个集合类型不保存数据,可以把它看作是遍历数据集合的高级迭代器(Iterator)。...Stream 的特点 只能遍历(消费)一次。Stream 实例只能遍历一次,终端操作后一次遍历就结束,再次遍历需要重新生成实例,这一点类似于 Iterator 迭代器。 保护数据源。...Stream 常用操作 Stream 接口中定义了很多操作,大致可以分为两大类,一类是中间操作,另一类是终端操作; 1. 中间操作 中间操作会返回另外一个流,多个中间操作可以连接起来形成一个查询。...你预期是 List, 返回却是 List, 这是因为 split 方法返回的是 String[] 这个时候你可以想到要将数组转成 stream, 于是有了第二个版本 Stream<Stream...终端操作 终端操作将 stream 流转成具体的返回值,比如 List,Integer 等。常见的终端操作有:foreach, min, max, count 等。
目录 实体类 方法类 接口类 测试类 ---- 直接上代码吧! 还是先上示例图吧!一共有18个功能,如果觉得功能较多可以略做删减,这是最初般的不用连接数据库,其他功能小伙伴们可以去探索!...实体类:写你所需要的字段,格式如下 数据类型 字段名 int sid、string sname 方法类:增删改查,里面的每个方法都有注释,可以直接看代码 public class People { Student...=null) { if(s[j].getScore()>s[i].getScore()) { Student a = s[i]; s[i]=s[j]; s[...=null) { if(s[j].getScore()getScore()) { Student a = s[i]; s[i]=s[j]; s[...(stu); } } } public void setSid(String sid) { // TODO Auto-generated method stub } } 接口类
领取专属 10元无门槛券
手把手带您无忧上云