Java 各种工具类的使用方法

news2024/11/29 12:41:33

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”之间的字符串,以数组形式返回。

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

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

相关文章

分布式教程从0到1【1】分布式基础

1 分布式基础概念 1.1 微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个小服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是 HTTP API。这些服务围绕业务能力来构建&#xff0c;并通过完全自动化部署…

ECRS工时分析软件:全面提升生产效率和产能管理的利器

在当今高度竞争的商业环境中&#xff0c;企业需要不断提升生产效率和产能管理以保持竞争优势。ECRS工时分析软件作为一款专业的工具&#xff0c;通过自动导出各种表格和图表&#xff0c;全面涵盖了生产过程中的各种分析和改善活动&#xff0c;为企业提供了提升生产效率和产能管…

数据库.创建表

创建表结构 -- 创建表结构create table tb_user(id int comment ID,唯一标识,username varchar(20) comment 用户名,name varchar(10) comment 姓名,gae int comment 年龄,gender char(1) comment 性别)comment 用户表;

Freeswitch中CHANNEL_HANGUP外呼挂断事件

1.CHANNEL_HANGUP外呼挂断事件 事件详细 ################## 外呼挂断&#xff1a;############################# [EslMessage{contentTypecommand/reply, headers3, body0 lines}] 2023-11-16T03:41:33.5140800 INFO c.e.c.v.s.c.i.FsServerEventHandler - eventReceived:…

洗地机哪个牌子好?2023热门洗地推荐

随着科技的不断发展&#xff0c;智能家居产品成为现代生活的一部分。在这个日新月异的时代&#xff0c;人们追求更便捷、高效的生活方式。洗地机作为一款时尚生活必备的清洁家电产品&#xff0c;正逐渐受到人们的关注和喜爱&#xff0c;面对满目琳琅的洗地机&#xff0c;我们该…

京东联盟flutter插件使用方法

目录 1.京东联盟官网注册申请步骤略~2.安卓端插件配置&#xff1a;3.IOS端插件配置4.其它配置5.京东OAuth授权 文档地址&#xff1a;https://baiyuliang.blog.csdn.net/article/details/134444104 京东联盟flutter插件地址&#xff1a;https://pub.dev/packages/jdkit 1.京东联…

静态共享代理和静态独享有哪些区别?怎么选择?

在软件开发中&#xff0c;静态共享代理&#xff08;Static Proxy&#xff09;和静态独享&#xff08;Monostatic&#xff09;是两种常见的软件设计模式。这两种模式在实现方式、使用场景以及优缺点上存在一定的差异&#xff0c;下面将详细介绍它们的区别以及如何进行选择。 一、…

如何批量在文件名中加标点符号?

如何批量在文件名中加标点符号&#xff1f;标点符号在文件名中的作用通常是用来分隔不同部分的内容&#xff0c;或者用来表示特定的含义。例如&#xff0c;下划线"_" 可以用来连接文件名的不同部分&#xff0c;使得文件名更易于阅读和理解。另外&#xff0c;使用连字…

新生儿腿纹不对称:原因、科普和注意事项

引言&#xff1a; 新生儿身上出现腿纹不对称的现象在一些家庭中可能引起担忧&#xff0c;然而&#xff0c;了解这一现象的原因以及如何正确处理是非常重要的。本文将科普新生儿腿纹不对称的原因&#xff0c;提供相关信息&#xff0c;并为父母和监护人提供注意事项&#xff0c;…

通往优秀软件架构师之路:掌握技术核心,修炼基础原理【文中送书,十本任选】

通往优秀软件架构师之路&#xff1a;掌握技术核心&#xff0c;修炼基础原理 《高并发架构实战&#xff1a;从需求分析到系统设计》《架构师的自我修炼&#xff1a;技术、架构和未来》《中台架构与实现&#xff1a;基于DDD和微服务》《分布式系统架构&#xff1a;架构策略与难题…

elementui 实现树形控件单选

实现&#xff1a; <!--author: itmacydesc: 树节点单选 --> <template><div class"about"><el-tree :data"data"ref"tree":props"defaultProps"node-key"id"show-checkboxcheck-strictlycheck-change…

2-10岁女童冬季穿搭怎么选?麻麻们看这里

分享适合女宝的羽绒服穿搭 这种黄色真的超好看 吸睛显白怎么穿都好看 长款连帽设计&#xff0c;精致走线 冬天穿时尚又好看&#xff01;&#xff01;

某个订单项目记录,涉及MQ消息处理、分布式问题、幂等性等问题解决设计

文章目录 消息队列&#xff08;Message Queue&#xff09;什么场景下&#xff0c;使用消息队列&#xff1f;消息队列 概述 RabbitMQ 消息队列RabbitMQ 概念名词 概念RabbitMQ 流程 RabbitMQ 安装RabbitMQ 页面介绍Exchange 交换机类型Spring Boot 整合RabbitMQAmqpAdmin 与 Rab…

Angular 由一个bug说起之二:trackBy的一点注意事项

trackBy是angualr优化项目性能的一种方法, 通过返回一个具有绑定性的唯一值, 比如id&#xff0c;手机号&#xff0c;身份证号之类的&#xff0c;来让angular能够跟踪数组的项目&#xff0c;根据数据的变化来重新生成DOM, 这样就节约了性能。 但是如果是使用ngFor循环组件&…

分享好用的浏览器内截图和滚动截图扩展

一、先打开浏览器安装好这个扩展 我已经安装过了 二、使用方式 单击就行了&#xff0c;如果页面很长&#xff0c;那么会自动滚动截屏。 截图完成后&#xff0c;如图 右上角是一排操作按钮&#xff0c;有删除、下载(pdf和png)、编辑。不过编辑过的图片下载是要开会员的。直接…

为什么小型企业应该拥抱数字化转型?

在当今飞速发展的商业环境中&#xff0c;数字化转型已经成为各种规模组织的必然选择。特别是小型企业&#xff0c;通过数字化转型&#xff0c;可以在保持竞争力、提高运营效率并开启新的增长机会方面获益匪浅。本文探讨了数字化转型的概念&#xff0c;强调了它对小型企业的重要…

【智能家居项目】FreeRTOS版本——将裸机程序改造成FreeRTOS程序 | DHT11温湿度传感器

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 如上图所示是裸机版本的智能家居项目总体框架结构&#xff0c;这篇文章开始&#xff0c;本喵要…

OpenAI 的 CEO Sam Altman :OpenAI 正在研发下一代 AI 模型 GPT-5 但没有承诺发布时间

本心、输入输出、结果 文章目录 OpenAI 的 CEO Sam Altman :OpenAI 正在研发下一代 AI 模型 GPT-5 但没有承诺发布时间前言Sam Altman 接受《金融时报》的采访 消息汇总GPT-4 turboOpenAI 目标 AGI (通用人工智能)弘扬爱国精神OpenAI 的 CEO Sam Altman :OpenAI 正在研发下…

RS485接线方式

用2个触点连接RS485设备——RS485引脚半双工分配&#xff1a; 用4个触点连接RS485设备——RS485引脚全双工分配&#xff1a; 参考文章&#xff1a;RS485引脚说明及接口说明 文章目录 RS485 接线方式引言RS485通信标准简介基本特性差分信号&#xff1a;RS485使用差分信号传输&am…

怎样备份电脑文件比较安全

域智盾软件是一款功能强大的电脑监控软件&#xff0c;它不仅具备实时屏幕监控、行为审计等功能&#xff0c;还能够对电脑文件进行备份和管理。下面将介绍域智盾软件如何备份电脑文件&#xff0c;以确保数据安全。 1、开启文档备份功能 部署后台&#xff0c;然后点击文档安全&a…