java List数据内存分页
原创 2021-12-08 13:33 阅读(529)次
我们常常要对List数据切分和分页,最近客户要求我们调用第三方接口拿到所有数据然后做分页返回给他 们,全量数据拿到后都是在缓存在内存中,这不像查询询数据库有语句支持,于是我们就搞了个List分页的工具类。这里分享一下我们使用的分页工具类。代码其实也是简单的,没什么难度,关键是提供给急需的朋友们。
上代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ListPageUtil {
/**
...
java stream去重的几种方式
原创 2021-12-01 16:23 阅读(4264)次
我们在操作stream时,如果遇到转map时,如果不处理key重复,就会报错Duplicate key,今天就分享一下我们在操作java stream时如何去重,有哪几种方式。
例如我们源数据有,以下很多例子都使用list来操作
```java
List list = new ArrayList();
list.add(new UserInfo(1,"小明",1));
list.add(new UserInfo(2,"小s",2));
list.add(new UserInfo(1,"小明",2));
```
如果我们要将上面数据去重,按id转换成map,有三种...
java接口中定义成员变量后会被不同实现类修改,别忘记接口变量默认是public static final
原创 2021-11-18 16:43 阅读(461)次
今天定义了一个接口,它有很多实现类,为了把实现类中的相同的变量抽出去,于是我把它放在了接口类中。
代码如下:
接口代码:
```java
public interface ValueHandle {
public Map generateModeSupportMap = new HashMap<>();
}
```
实现类代码:
```java
public class DateValueHandle implements ValueHandle {
@Override
public void afterPropertiesSet() th...
java如何减少if判断让代码优雅一点:采用Map+工厂模式实现
原创 2021-11-18 12:27 阅读(436)次
最近在写一个数据生成工具,代码中需要判断各种数据类型,有一个枚举中定义了很多类型,根据这些不同类型有不同的操作,于是我写了一大排的if,把自己都给搞晕了,代码大致如下:
数据类型枚举定义:
```java
public enum GenerateDataType {
/**
* 自增,对应java的Long
*/
AutoIncre(),
/**
* 字段串类型
*/
String(),
/**
* 数字
*/
Number(),
/**
...
java表达式运算性能比较:Jep与QLExpress
原创 2021-11-18 09:48 阅读(378)次
#### 前言
之前我有分享过java的表达式运算,由于我的业务要求表达式中要有业务变量,例如要根据id和orderNumber动态生成一个单号,表达式的定义如下所示:
id+orderNumber
所以我们需要一个支持替换变量的表达式计算引擎,开始我们选择了jep,但后面发现我们业务中的jep表达式计算秒级只能做到2300条左右,这太慢了,于是我再找了下其他引擎,发现阿里开源了一个,名叫QLExpress,地址:[https://gitee.com/cuibo119/QLExpress](https://gitee.com/cuibo119/QLExpress "https://git...
LOG_PATH_IS_UNDEFINED/info.log (No such file or directory)
原创 2021-10-18 17:42 阅读(317)次
本文介绍解决java.io.FileNotFoundException: LOG_PATH_IS_UNDEFINED错误。
微服务在本地部署没有问题,部署在rancher中却报如下错误:
```
2021-10-18 17:10:47.886 ERROR [pip-data-lifecycle-management] [10.42.2.53:serverPort_IS_UNDEFINED] [main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Logba...
jmeter随机日期参数
原创 2021-09-24 12:03 阅读(225)次
10000到15999随机数
${__Random(10000,15999,)}
当前日期格式化成yyyy-MM-dd HH🇲🇲ss
${__time(yyyy-MM-dd HH🇲🇲ss)}
日期范围内随机
${__RandomDate(yyyy-MM-dd,2018-01-01,2018-12-31,,)}
随机日期时间,拼接的格式为yyyy-MM-dd HH🇲🇲ss
```
${__RandomDate(yyyy-MM-dd,2021-09-10,2021-09-18,,)} ${__Random(10,24,)}:${__Random(10,59,...
Jep实现Java表达式计算
原创 2021-09-13 17:48 阅读(610)次
开发过程中会遇到动态的表达式计算,网上找了不少这种组件,这里记录一下我用的,那就是Jep,简单好用,支持double,字符串计算。
导入maven:
```xml
jep
jep
2.24
```
代码例子:
```java
public static void main(String args[]) {
JEP jep = new JEP();
jep.addVariableAsObject("A","A");
jep.addVariableAsObject("B...
解决mybatis打印查询结果集造成太多日志的问题
原创 2021-08-24 11:28 阅读(2288)次
我们项目使用的是Mybatis-plus,由于前端要展示所有摄像头,有5000路,页面打开很慢。看了下后端日志,查询时mybatis-plus会把所有5000行数据显示出来,造成后端api请求很慢。SQL日志如下:
```
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f45abe6]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f45abe6] fro...
ThreadLocal正确使用姿势,避免再掉坑
原创 2021-07-20 17:53 阅读(458)次
今天为了不改变方法的参数,使用ThreadLocal在线程内传值,一不小心就掉坑里了,发现数据错乱了,原因是:我的业务要求不是所有线程都要执行ThreadLocal.set动作,但是所有线程都要执行ThreadLocal.get,而我没执行ThreadLocal.remove动作。造成get的时候会取到上一条的数据,于是就数据错乱了,这里记录一下,怕自己又忘记了。
贴一下正确姿势代码:
```java
public class SendMessageRetryTheadLocal {
private static ThreadLocal sendMessageLogStor...
json转List<T>数组泛型如何转以及Map的泛型?
原创 2021-07-08 16:18 阅读(831)次
json转List数组泛型如何转?
我们可以使用fastjson,如下代码:
```java
List cacheList
= JSON.parseObject(deviceListJson, new TypeReference>() {});
```
如上代码是想把json转成数组,Ape是我们的实体类。
pom就不贴了
以及Map的转换
```java
Map outputData = JSON.parseObject(jsonString, new TypeReference>() {});
```
fastjson转字符串时保留null空字段
原创 2021-06-16 10:42 阅读(686)次
在使用fastjson时,有时我们需要将对象转成json字符串,但你会发现转换后的字符串中会少了null值的字段。
那fastjson转字符串后如何保留null空字段呢?
最直接的代码如下:
```java
String jsonStr = JSON.toJSONString(object, SerializerFeature.WriteMapNullValue);
```
java enum枚举转list和Map
原创 2021-06-10 15:08 阅读(2431)次
java中如何将枚举的定义转成list或者Map,让我们更好的操作枚举值?
思路是使用枚举的values()方法,将枚举定义转成对应你想要的数据类型。
分享代码如下,其中AlarmType中定义了很多枚举值:
```java
public class EnumToListAndMap {
public enum AlarmType{
OVER_SPEEDING_ALARM("overSpeedingAlarm","超速行驶预警"),
DEVICE_IDLE_ALARM("deviceIdleAlarm","设备空闲预警"),
UNLOCK_ALAR...
spring boot或spring cloud项目中使用系统环境变量问题
原创 2021-05-25 18:08 阅读(1037)次
#### 前言
项目开发过程中有时候需要用环境变量来解决一些复杂配置的问题,比如同一个服务要部署多个实例,但这些实例需要使用不同的配置时,这些就可以用环境变量来解决,这不管是原始的部署方式或使用k8s部署方式都是可以使用环境变量来解决这种问题。
下面我们分享下开发和部署时怎么设置环境变量
#### 代码示例
先上示例代码,比如我们要在bootstrap.yml中读取env_test这个环境变量,如下配置:
```yaml
env:
test: ${env_test}
```
如果你遇到spring boot项目bootstrap.yml配置无法生效,可以看看我...
bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value
原创 2021-05-25 17:20 阅读(1580)次
今天在bootstrap.yml加了一个配置,一直读取不到,一直报如下错误:
```
java.lang.IllegalArgumentException: Could not resolve placeholder 'env.test' in value "${env.test}"
```
bootstrap.yml配置如下:
```yaml
env:
test: 1
```
代码如下:
```java
@Component
public class EnvConfig {
@Value("${env.test}")
private S...
java Md5工具类获取字符串的Md5值
原创 2021-05-14 10:02 阅读(346)次
java如何获取字符串的Md5值?
具体代码如下:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Utils {
public static String getMd5(String str) throws NoSuchAlgorithmException {
byte [] bytes = str.getBytes();
StringBuffer sb = n...
java List间计算并集、差集、交集以及去重
原创 2021-05-14 09:39 阅读(1483)次
Java中如何计算两个List的并集、差集、交集?
并集和交集我们都很清楚,但其中这里说的差集是什么意思呢?指的是集合listA与listB差集,准确来说是用listB去删除listA中存在listB中的元素。
Java集合中针对这三个场景提供了三个方法。
- 并集使用list.addAll()方法;
- 差集使用list.removeAll()方法;
- 交集使用list.retainAll()方法;
其中removeAll和retainAll都会根据对象的equals方法来比对对象是否相等,要正确的使用这两个方法需要注意对象的类是否要重写equals和hashCode方...
LinkedBlockingQueue实现定长队列自动出队与读取队列
原创 2021-04-23 16:10 阅读(642)次
我要实现一个存储请求状态的队列缓存,需要用到LinkedBlockingQueue,实现定长队列自动出队,另外还要实现不出队的情况下读取队列数据。
代码如下:
```java
LinkedBlockingQueue queue = new LinkedBlockingQueue(3);
queue.offer(1);
queue.offer(2);
queue.offer(3);
boolean offer = queue.offer(4);
if(offer == false)...
解决java.lang.OutOfMemoryError: unable to create new native thread
原创 2021-04-08 10:40 阅读(474)次
#### 异常问题
项目并发测试一个功能时报创建不了本地线程,如下:
```
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:717)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:957)
at ...
java使用snakeyaml库读取和操作yml文件
原创 2021-03-11 16:17 阅读(531)次
随着spring boot项目的流行,现在已有很多项目在使用yml文件来配置我们的项目。其中也有一些中间件比如elasticearch配置文件都在用yaml文件来配置。
有时我们会有一些需求,比如动态配置,动态读取yml文件来操作我们的配置文件,那么这时就需要解析yml文件了。
那java中如何读取和操作yml文件呢?答案是snakeyaml库。
引入jar包:
```xml
org.yaml
snakeyaml
1.25
```
下面分享一些资料:
官方api与文档:
https://bitbucket.org/aso...
maven jar包 搜索网址分享
原创 2021-03-10 19:40 阅读(774)次

我们java程序员开发时通常用maven引入jar包的形式导入工具库包。有时为了升级某个jar包时却不知道这个jar包有什么版本的,这时我们就需要去网络上搜索了。

这里分享几个网站,大家可以从上往下搜索你想要的jar包。
#### mvnrepository
http://mvnrepository.com/
#### maven.org
http://search.maven.org/
#### sonatype.org
https://re...
maven修改jar包版本不生效解决办法
原创 2021-03-10 16:18 阅读(3453)次
今天在maven中修改一个jar包版本,想升级版本,却一直不生效。
pom文件如下:
```xml
org.eclipse.jgit
org.eclipse.jgit
5.1.3.201810200350-r
```
在当前工程查看这个jar包的版本是改过来了,从4.1变成了5.1。
如下图所示:

但是在另一个工程中引用这个工程时,这个jar包的...
Thumbnails使用方法(java图片处理工具类)
转载 2021-03-09 14:10 阅读(446)次
本文链接:https://blog.csdn.net/qq_25508039/article/details/82257436
#### 介绍
我们在java开发时,使用Thumbnails工具类能帮助我们对图片进行很好的处理,Thumbnails对图片的操作进行了很好的封装,往往很复杂的步骤能用一行代码就完成。
Thumbnails支持:
- 1. 指定大小进行缩放
- 2. 按照比例进行缩放
- 3. 不按照比例,指定大小进行缩放
- 4. 旋转
- 5. 水印
- 6. 裁剪
- 7. 转化图像格式
- 8. 输出到OutputStream
- 9. 输出到B...
java中BufferedImage转成 base64字符串
原创 2021-03-08 17:14 阅读(4926)次
java中BufferedImage转成base64字符串,代码如下:
```java
/**
* BufferedImage转成 base64
* @param bufferedImage
* @param imageFormatName
* @return
* @throws IOException
*/
public static String getBufferedImageToBase64(BufferedImage bufferedImage,String imageFormatName...
java下载图片
原创 2021-03-08 17:10 阅读(328)次
如何在后端代码中,使用java下载图片?
代码分享如下:
```java
/**
* 下载图片
* @param url
* @return
*/
public static BufferedImage downLoad(String url) {
// 获得Http客户端
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// 创建Get请求
HttpGet ht...
docker构建体积较小的jdk镜像
原创 2021-03-01 14:28 阅读(785)次
#### 前言
我们一般在docker中运行java项目都会选择体积较小的jdk镜像,比如alpine-java构建的jdk镜像,但alpine安装软件并不方便,并且有些软件在alpine中并不好装。
例如我们java项目中使用tesseract来做图片文字识别,它在centos中很容易安装,在alpine环境中,怎么都没法安装成功,于是我们就需要构建一个有centos环境的jdk镜像
#### 构建有centos环境的jdk镜像
1.下载jre
下载地址:
https://www.java.com/en/download/manual.jsp
下载jre8.tar.gz,并不是...
图片的base64字符转成BufferedImage
原创 2021-02-23 17:43 阅读(788)次
图片的base64字符转成BufferedImage
代码如下:
```java
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.Base64.Decoder;
public class ImageUtils {
/**
* base64 编码转换为 ...
java使用BufferedImage放大或缩小图片
原创 2021-02-23 11:32 阅读(1596)次
BufferedImage可以用来简单编辑图片:包括裁剪、放大、缩小等。
下面贴的是利用BufferedImage做图片放大或缩小代码:
```java
String imageBase64 = "xxxxxx";//图片base64字符串
BufferedImage image = ImageUtils.base64ToBufferedImage(imageBase64);
int width = image.getWidth();
int height = image.getHe...
java使用guava cache实现本地缓存
原创 2021-02-04 15:39 阅读(2782)次
在高并发的场景中我们不希望所有请求都打到数据库中,以免压垮数据库,这时我们就可能会使用本地缓存来实现解决并发性能问题,当然我们也可以选择redis来实现,但redis有时并发也并没有那么快。于是本地缓存就是我们的唯一救命手段了。
Guava的cache是线程安全的,是本地缓存的不二之选,默认情况下缓存过期是依赖于访问判断时间过期和数量限制过期。
我们再也不用自己手写一个基于ConcurrentHashMap的本地缓存了
#### maven引入guava包
```html
com.google.guava
guava
18.0
...
java stream List转Map与List转List与Map转List以及List<Map>转Map
原创 2021-02-03 17:26 阅读(4652)次
我们写代码时经常会遇到List转Map或List转List,Map转List,看到我这标题有没有要晕(我在说什么??转来转去)。之前没有用stream的时候,都是用for循环转换,现在jdk8提供流式处理,性能稍快,还方便。
下面记录一下代码,免得自己老是不记得如果编写stream.
#### List转Map
```java
Map tgMap = tgList.stream().collect(Collectors.toMap(BazTgTO::getTgId, n -> n));
```
#### Map转List
```java
list = dbFilterM...