Java 各种工具类的使用方法

1. 属性拷贝 属性名词和类型相同才能拷贝

import org.springframework.beans.BeanUtils;
BeanUtils.copyProperties(dto,wmNews); //dto, wmNews 是两个实体类  dto为源对象,wmNews为目标对象

2. list集合转换为string类型

import org.apache.commons.lang3.StringUtils;
String images = StringUtils.join(dto.getImages(), ",");  // 字符串中以 , 进行分割

3. 将json格式的String类型按照指定格式进行转换

List<Map> mapList = JSON.parseArray(content, Map.class); // 将json格式的String类型按照指定格式进行转换

public List<String> extractUrlInfo(String content){
    List<String> materialList = new ArrayList<>();
    List<Map> mapList = JSON.parseArray(content, Map.class); // 将json格式的String类型按照指定格式进行转换
    for (Map map : mapList) {
        if (map.get("type").equals("image")){
            String imageUrl = (String) map.get("value");
            materialList.add(imageUrl);
        }
    }
    return materialList;
}

在这里插入图片描述

4. 前端将’id1,id2,id3’ 转换成’id1’,‘id2’,‘id3’

$("#excelExport").click(function() {
	var rows = $grid.datagrid('getChecked');   // 获取所有勾选的记录
	var ids = "";
	if (rows) {
		$.each(rows, function(index, value) {
			ids += (value.id + ",")  // 将所有勾选记录的id拼装为字符串, 'id1,id2,id3,'  注意该字符串最后多了一个逗号
		});
		if (ids == "") {
			$.messager.alert("操作提醒", "请先勾选需要导出的记录", "warning");
		} else {
			ids = ids.substr(0, ids.length - 1);  // 删除字符串最后一个字符,'id1,id2,id3'
			let strList = ids.split(',');  // 将字符串进行分隔
			let idList = "";
			// 将'id1,id2,id3' 转换成'id1','id2','id3'
			for (let i = 0; i < strList.length; i++) {
				idList += ("'"+strList[i]+"'");//拼接单引号,到数据库后台用in查询.
				if(i!=strList.length-1){//前面的元素后面全拼上",",最后一个元素后不拼
					idList += (",");
				}
			}
			// 导出功能
			window.parent.location.href = "${ctx}/change/znAchievementChangeReward/excelExportDetail?ids=" + ids;
		}
	} else {
		$.messager.alert("操作提醒", "请先勾选需要导出的记录", "warning");
	}
});

5. 将数组 String[] 转换为 List 集合

/**
	 * 根据转化项目和奖励年度进行分组    Collectors.groupingBy()
	 * @param ids  -- 'id1,id2,id3'
	 * @return
	 */
public Map<String, List<ZnAchievementChangeReward>> getRewardGroup(String ids){
	String[] split = ids.split(",");
	List<String> resultList=new ArrayList<>(Arrays.asList(split));  // 将数组 String[] 转换为 List 集合
	List<ZnAchievementChangeReward> rewards = znAchievementChangeRewardDao.getRewardsByIds(resultList);
	if (rewards.size() > 0){
		// 使用stream流进行分组
		Map<String, List<ZnAchievementChangeReward>> listMap = rewards.stream().collect(
				Collectors.groupingBy(
						reward -> reward.getProjectId() + ";" + reward.getRewardYear()
				)
		);
		return listMap;
	}
	return null;
}

6. oracle 数据库根据某字段和进行排序

--  zn_score_person  表名称;    SCORE,JOB_NUM 表字段;   dense_rank()  oracle自带排序方法
SELECT t.*,dense_rank() over(order by t.totalScore desc) rank FROM 
(SELECT sum(SCORE) as totalScore,JOB_NUM FROM zn_score_person GROUP BY JOB_NUM ORDER BY totalScore DESC) t 

在这里插入图片描述

7. 提取字符串中的数值

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 获取字符串中的数值
 */
public class isNumber {
    public static void main(String[] args) {
        String s = getNumber("92.9%");
        System.out.println(s);
    }
    
    public static String getNumber(String str) {
        String pReg = "(\\d+\\.\\d+)";
        // 控制正则表达式的匹配行为的参数(小数)
        Pattern p = Pattern.compile(pReg);
        //Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
        Matcher m = p.matcher(str);
        //m.find用来判断该字符串中是否含有与"(\\d+\\.\\d+)"相匹配的子串
        if (m.find()) {
            //如果有相匹配的,则判断是否为null操作
            //group()中的参数:0表示匹配整个正则,1表示匹配第一个括号的正则,2表示匹配第二个正则,在这只有一个括号,即1和0是一样的
            str = m.group(1) == null ? "" : m.group(1);
        } else {
            //如果匹配不到小数,就进行整数匹配
            pReg = "(\\d+)";
            p = Pattern.compile(pReg);
            m = p.matcher(str);
            if (m.find()) {
                //如果有整数相匹配
                str = m.group(1) == null ? "" : m.group(1);
            } else {
                //如果没有小数和整数相匹配,即字符串中没有整数和小数,就设为空
                str = "";
            }
        }
        return str;
    }

}

在这里插入图片描述

8. 前后端传递时间注意事项

import java.sql.Timestamp;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.kl.bf.entity.Excel;
import org.kl.bf.entity.AuditableEntityForSaas;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * @author Code Generator
 * @since  2023-02-27 09:13:12
 * @see   ZnNtAchresult
 */
@Entity
@Table(name = "zn_nt_achresult")
public class ZnNtAchresult extends AuditableEntityForSaas {
	private static final long serialVersionUID = 1L;
		
		@Excel(exportName = "成果获得时间")
		@DateTimeFormat(pattern="yyyy-MM-dd")
		private Timestamp getTime;
		
		public ZnNtAchresult(String id) {
			this.id = id;
		}

		@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
		public Timestamp getGetTime() {
			return getTime;
		}

		public void setGetTime(Timestamp getTime) {
			this.getTime = getTime;
		}
}

@DateTimeFormat(pattern=“yyyy-MM-dd”) // 前端传递到后端时间格式化
@JsonFormat(pattern = “yyyy-MM-dd”, timezone = “GMT+08:00”) // 后端回显到前端显示格式

9. double 类型数据加减乘除运算

import java.math.BigDecimal;
public class DoubleUtil {
    
    private static final int DEF_DIV_SCALE = 5; // 小数点后的保留位数
    
    /**
     * Double精确的加法运算
     * @param d1 被加数
     * @param d2 加数
     * @return 两个参数的和
     */
    public static double add( double d1, double d2 ) {
        BigDecimal value1 = new BigDecimal( Double.toString(d1) );
        BigDecimal value2 = new BigDecimal( Double.toString(d2) );
        return value1.add(value2).doubleValue();
    }
    
    /**
     * Double精确的减法运算
     * @param d1 被减数
     * @param d2 减数
     * @return 两个参数的差
     */
    public static double sub( double d1, double d2 ) {
        BigDecimal value1 = new BigDecimal( Double.toString(d1) );
        BigDecimal value2 = new BigDecimal( Double.toString(d2) );
        return value1.subtract(value2).doubleValue();
    }
    
     /**
      * Double精确的乘法运算
      * @param d1 被乘数
      * @param d2 乘数
      * @return 两个参数的积
      */
    public static Double mul( double d1, double d2 ) {
        BigDecimal value1 = new BigDecimal( Double.toString(d1) );
        BigDecimal value2 = new BigDecimal( Double.toString(d2) );
        return value1.multiply(value2).doubleValue();
    }
    
    /**
      * Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后10位, 以后的数字四舍五入
      * @param d1 被除数
      * @param d2 除数
      * @return 两个参数的商
      */
    public static double div( double d1, double d2 ) {
        return div( d1, d2, DEF_DIV_SCALE );
    }
    
    /**
     * Double精确的除法运算, 当出现除不尽的情况时, 精确到小数点以后10位, 以后的数字四舍五入
     * @param d1 被除数
     * @param d2 除数
     * @param scale 表示需要精确到小数点的后几位
     * @return 两个参数的商
     */
    public static double div( double d1, double d2, int scale ) {
        if ( scale < 0 ) {
            throw new IllegalArgumentException( "参数[scale]必须是正整数或者零" );
        }
        BigDecimal value1 = new BigDecimal( Double.toString(d1) );
        BigDecimal value2 = new BigDecimal( Double.toString(d2) );
        return value1.divide( value2, scale, BigDecimal.ROUND_HALF_UP ).doubleValue();
    }
 
}

10.StringUtils 工具类截取字符串

//与第一种方法效果一样
StringUtils.substring("hello world", 4);     // 返回值,从第4位截取到字符串末尾 : o wrold
StringUtils.substring("hello world", 4, 10); // 返回值,从第4位截取到第10位    :   o wrol

//截取某个字符串之前的字符
StringUtils.substringBefore("hello world", "l"); 
//结果是:he          这里是以第一个”l”,为标准。
StringUtils.substringBeforeLast("hello world", "l");
//结果为:hello wor   这里以最后一个“l”为准。

//截取某个字符串之后的字符
StringUtils.substringAfter("hello world", "l");
//结果是:lo world   这里是以第一个”l”,为标准。
StringUtils.substringAfterLast("hello world", "l");
//结果为:d          这里以最后一个“l”为准。

//截取两个字符串之间隔的字符
StringUtils.substringBetween("hello world", "o");    
//结果是: w   两个o之间的字符串。   
StringUtils.substringBetween("hello world", "l", "r"); 
//结果是: lo wo   第一个字符“l”与第一个字符“r”之间的字符串   
StringUtils.substringsBetween("hello world", "l", "r");
//结果是:数组 [lo wo]   第一个字符“l”与第一个字符“r”之间的字符串,以数组形式返回。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将Python程序(.py)转换为Windows可执行文件(.exe)

python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http://www.jianshu.com/p/8abcf73adba3),并要将软件打包为可执行文件(.exe结尾),那如何将.py转为.exe ? 将.py转为.exe 第一步:安装pyinstaller(临时调用了国内豆…

atoi函数的模拟实现

函数原型&#xff1a;int atoi (const char * str); 作用&#xff1a;将字符串转换为整数 注意事项&#xff1a; 1、会忽略字符串前的空白字符&#xff0c;并从第一个非空白字符开始解析整数&#xff0c;直到遇到非数字字符为止 具体代码如下&#xff1a; #include <s…

sscanf提取相应字符到数组

代码如下 #include<stdio.h> #include<string.h>int main(int argc, char const *argv[]) {char buf[128] {0};int m1 0, m2 0;int s1 0, s2 0;char lrc[128] "";sscanf("[02:16.33][04:11.44]我想大声宣布对你恋恋不舍","[%*1d%d…

gitLab server version 13.12.1 is not supported

拉代码的时候&#xff0c;报的这个错&#xff0c;实际上就是因为gitLab 版本太低了&#xff0c;这里不准备升级版本&#xff0c;打算继续使用账号密码来拉取代码 在idea已经安装的插件中&#xff0c;去掉gitlab插件&#xff0c;如下&#xff1a; 之后再拉取代码&#xff0c;就…

五分钟学会搭建悟空CRM内网穿透,实现公网访问企业内网,提升工作效率!

文章目录 前言1. 无需公网IP&#xff0c;使用cpolar实现悟空CRM远程访问2. 通过公网来访问公司内网悟空CRM3. 设置固定连接公网地址 前言 悟空CRM是一款开源的客户关系管理系统&#xff0c;以"客户关系一对一理论"为基础&#xff0c;通过对企业业务流程的重组来整合…

【MATLAB】史上最全的7种回归预测算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有9种时序预测算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

《C++避坑神器·十九》C++多线程使用,啥也不懂看它就对了

C11后有了标准的线程库&#xff1a; #include <thread>并发 是指多个线程任务在同一个CPU上快速地轮换执行&#xff0c;由于切换的速度非常快&#xff0c;给人的感觉就是这些线程任务是在同时进行的&#xff0c;但其实并发只是一种逻辑上的同时进行&#xff1b; 并行 是…

GPTS全网刷屏!定制增长速度指数增长

还记的上周OpenAI刚刚举行完开发者大会&#xff0c;在大会上主要公布了三个事情&#xff1a; 新版本的GPT-4 Turbo&#xff1a;更强大、更便宜且支持128K新的助手API&#xff1a;让开发者更轻松地基于GPT构建辅助AI应用平台中新的多模态功能&#xff1a;包括视觉、图像创作&am…

MIB 6.1810操作系统实验:准备工作(Tools Used in 6.1810)

6.1810 / Fall 2023 实验环境&#xff1a; Ubuntuxv6实验必要的依赖环境能通过make qemu进入系统 $ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-ri…

Day1跟李沐学AI-深度学习课程00-04【预告、课程安排、深度学习介绍、安装、数据操作+数据预处理】

00 预告 《动手学深度学习》https://github.com/d2l-ai/d2l-zh 01 课程安排 02 深度学习介绍 03 安装 本地安装 使用conda/miniconda环境 conda env remove d2l-zh conda create -n -y d2l-zh python3.8 pip conda activate d2l-zh 安装需要的包 pip install -y jupyter …

云ES容灾方案

一、ES集群可用性容灾 1.1 云ES集群可用性容灾(使用跨可用区实例) 云ES集群部署在三个可用区,单可用区故障,云ES集群依然可能对外提供服务;两个可用区故障,需要进行控制台切流(集群会自动切的选择主节点) 应用服务部署在二个可用区,单可用区故障,依然可对提供服务1.2 …

C/C++---------------LeetCode第1189. “气球” 的最大数量

气球的最大数量 题目及要求统计法在main内使用 题目及要求 给你一个字符串 text&#xff0c;你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”&#xff08;气球&#xff09;。 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “ba…

数据结构-二叉树力扣题

目录 1.相同的树 2.二叉树中查找值为x的节点 3.单值二叉树 4.对称二叉树 5.二叉树的前序遍历 6.另一颗树的子树 层序遍历&#xff1a; 7.二叉树遍历 8.判断二叉树是否是完全二叉树 一个特殊的性质&#xff1a; 1.相同的树 题目链接&#xff1a;力扣&#xff08;LeetC…

与7无关的数

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

LeetCode热题100——二分查找

二分查找 1. 搜索插入位置2. 搜素二维矩阵3. 在排序数组中查找第一个和最后一个元素位置 1. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 // 题…

MySQL5.7安装详细过程--window系统

1、Window安装MySQL5.7详细过程 1.1、下载MySQL5.7安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 1.2、将文件解压到盘符中 你可以解压到你想解压的位置&#xff0c;放在C或其他盘符都可以。 我放在了C盘中&#xff1a;C:\Program Files\my…

【AI视野·今日Robot 机器人论文速览 第六十四期】Fri, 27 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 27 Oct 2023 Totally 27 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers 6-DoF Stability Field via Diffusion Models Authors Takuma Yoneda, Tianchong Jiang, Gregory Shakhnarovich, Matthew R. …

TikTok运营干货——养号篇

随着国内抖音红利的进一步释放&#xff0c;越来越多人涌入了TikTok国内外市场。而TikTok作为海外新兴的社媒平台&#xff0c;也在迅速的发展着&#xff0c;吸引了大批的跨境电商玩家入驻。然而&#xff0c;TikTok运营的一大难点就是养号&#xff0c;许多人还没开始转化号就被封…

3DMAX各种拼图建模插件集锦之“彩虹系列”

现实生活中我们随处可见各种重复的图案&#xff0c;例如地面上铺设的地砖&#xff0c;砌的砖墙石墙&#xff0c;覆盖着瓦片的屋顶&#xff0c;用作装饰的拼图图案等等&#xff0c;这些重复的拼图单体建模看似简单&#xff0c;但是大面积铺设&#xff0c;如果完全手动就有些费时…