StreamAPI
Stream Api
Java8中有两大最为重要的改变。第一个是**==Lambda==表达式;另外一个则是==Stream API==**;
Stream APl ( java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
Stream API 是Java 8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用**==Stream API==对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用Stream API来并行执行操作。简言之,Stream API**提供了一种高效且易于使用的处理数据的方式。
为什么要使用Stream API
实际开发中,项目中多数数据源都来自于Mysql,Oracle等。但现在数据源可以更多了,有MongDB,Redis等,而这些NoSQL的数据就需要Java层面而去处理。
Stream 和 Collection 集合的区别: C ...
Mybatis配置多数据源
MyBatis设置多数据源文件目录
Maven版本配置1234567891011121314<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>//spring-boot 2.3.0</dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus ...
SpringBoot注解大全
一、注解 (annotations) 列表@SpringBootApplication:
包含了 @ComponentScan、@Configuration 和 @EnableAutoConfiguration 注解。
其中 @ComponentScan 让 spring Boot 扫描到 Configuration 类并把它加入到程序上下文。
@Configuration 等同于 spring 的 XML 配置文件;使用 Java 代码可以检查类型安全。
**@EnableAutoConfiguration ** 自动配置。
**@ComponentScan ** 组件扫描,可自动发现和装配一些 Bean。
@Component 可配合 CommandLineRunner 使用,在程序启动后执行一些基础任务。
@RestController 注解是 @Controller 和 @ResponseBody 的合集, 表示这是个控制器 bean, 并且是将函数的返回值直 接填入 HTTP 响应体中, 是 REST 风格的控制器。
@Autowired 自动导入。
@PathVariabl ...
io流与File类
IO流1.File类的使用
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关。
File 能新建、删除、重命名文件和目录,但 **==File 不能访问文件内容本身==**。
如果需要**==访问文件内容本身==,则==需要使用输入/输出流==**。
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
File对象可以作为参数传递给流的构造器。
常用构造器123456789public File(String pathname)以pathname为路径创建File对象,可以是 绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。绝对路径:是一个固定的路径,从盘符开始相对路径:是相对于某个位置开始public File(String parent,String child)以parent为父路径,child为子路径创建File对象。public File(File parent,String child)根据一个 ...
RabbitMQ入门
RabbitMQ入门什么是消息队列MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦
常见MQ产品
ActiveMQ:基于JMS
RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会
Kafka:分布式消息系统,高吞吐量
MQ是消息通信的模型,并发具体实现实现MQ的有两种主流方式:AMQP、JMS。两者间的区别和联系:
JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模型;而AMQP的消息模型更加丰富
JMS(Java Message Service):基于JVM消息代理的规范。ActiveMQ、H ...
MybatisPlus入门
MyBatis-PlusMP是一个MyBatis的增强工具,只做增强不做改变。
文档及项目地址官方地址:https://mybatis.plus/
github: https://github.com/baomidou/mybatis-plus
MP自带的CRUD操作是针对单表操作的,如果要操作多表,可以写自定义sql。
给你举个使用条件构造器的多表sql例子,可以写在xml中或注解中,下面的是用xml的写法:
123456<select id="mySelectList" resultType="User"> select u.*,r.role_name from user u inner join role r on u.role_id = r.role_id ${ew.customSqlSegment}</select>
对应的Mapper接口中的方法定义:
1List<User> mySelectList(@Param(Constant ...
自然排序和定制排序
自然排序和定制排序一:Java中的对象,正常情况下,只能进行比较:== 或 != 不能使用 > <实际开发场景中,我们需要对多个对象进行排序,比较对象的大小。
使用两个接口的任何一个 Comparable 或 Comparator
当定制排序和自然排序同时存在时,最终的排序结果是按照 定制排序 来的。
对比:Comparable接口的方式一定,保证了Comparable接口实现类对象在任何位置都可以比较大小
Comparator接口属于临时性的比较
二:Comparable接口的使用 自然排序
1.像String、包装类等实现了Comparable接口,重写了**compareTo()**方法,给出了比较两个对象大小
2.像String,包装类重写compareTo()方法以后,进行了从小到大的排序
3.重写了compareTo()的规则:
如果当前对象this大于形参对象obj,则返回正整数
如果小于 返回负整数
如果等于 返回零
4.对于自定义类,如果需要排序,需要自 ...
获取两个字符串中最大相同子串
1234567891011121314151617181920212223242526272829303132333435363738394041/** * 获取两个字符串中最大相同子串。比如: * str1="abcwerthehelloyuiodef" str2="cvhellobnm" */public class StringDemo2 { /** * 提示:将短的那个串进行长度一次递减的子串与较长的串比较 * 从长的开始找,没找到长度递减 * cvhellobnm 没找到 长度-1 cvhellobn vhellobnm 两种情况 依次查找 * 该方法前提:两个字符串只有一个最大相同子串,要查询多个只需在本轮结束,用数组存储该轮相同子串 * @param str1 * @param str2 * @return */ public static String getMaxSameStr(String str1,String str ...
Jdk8新日期时间API
新日期时间API出现的背景如果我们可以跟别人说:“我们在1502643933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
可变性:像日期和时间这样的类应该是不可变的。
偏移性:Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等。
第三次引入的API是成功的,并且Java8中引入的java.time API已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务。
Java8吸收了Joda-Time的精华,以一个新的开始为Java创建优秀的API。新的 java.time中包含了所有关于==本地日期(LocalDate)== 、==本地时间(LocalTime)==、==本地日期时间(LocalDateTime)==、==时区(ZonedD ...
Jdk8之前日期时间API
Jdk8之前日期时间API1.System类中currentTimeMillis()System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日之间以毫秒为单位的时间差
12345class test{//1.System.currentTimeMillis(); long l = System.currentTimeMillis();//System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日之间以毫秒为单位的时间差}
2.java.util.Date和子类java.sql.Date1234567891011121314151617181920212223242526272829303132/** * JDK 8之前日期和时间的API测试 */public class DateTimeTest { /** * java.util.Date类 * /---java.sql ...