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”之间的字符串,以数组形式返回。
11. 两个相同类型, 相同长度的List集合相加
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* 将两个List<Integer> 集合中的相同下标的值相加生成一个新的List
*/
public class ListAddTest {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(3,2,7,4,5);
List<Integer> list2 = Arrays.asList(1,2,3,4,5);
List<Integer> result = IntStream.range(0, list1.size()).map(i -> list1.get(i) + list2.get(i)).boxed().collect(Collectors.toList());
System.out.println(result);
System.out.println("---------------------------------------");
List<Double> list3 = Arrays.asList(0.0,2.7,0.0,null,5.3);
List<Double> list4 = Arrays.asList(0.0,0.0,3.4,4.1,5.1);
List<Double> doubles = listAdd(list3,list4);
System.out.println(doubles);
}
/**
* 将两个List<Double> 集合中的相同下标的值相加生成一个新的List
* @param l1
* @param l2
* @return
*/
public static List<Double> listAdd(List<Double> l1, List<Double> l2){
List<Double> doubles = new ArrayList<>();
for (int i = 0; i < l1.size(); i++) {
Double one = add(l1.get(i), l2.get(i));
doubles.add(one);
}
return doubles;
}
public static Double add(Double v1, Double v2) {
BigDecimal b1 = new MyBigDecimal(v1);
BigDecimal b2 = new MyBigDecimal(v2);
return b1.add(b2).doubleValue();
}
}
class MyBigDecimal extends BigDecimal {
MyBigDecimal(Double v) {
super(String.valueOf(v == null ? 0d : v));
}
}
12. 按格式返回当前的年月
/**
* 按格式返回当前的年月
* 当前时间: 2024-03 返回List集合 ["2024-01","2024-02","2024-03"]
* @return
*/
public static List<String> getAllMonthsOfYear() {
String inputDate = new SimpleDateFormat("yyyy-MM").format(new Date());
String year = inputDate.split("-")[0];
String month = inputDate.split("-")[1];
List<String> months = new ArrayList<>();
for (int i = 1; i <= Integer.parseInt(month); i++) {
if (i < 10) {
months.add(year + "-" + String.format("%02d", i));
}else {
months.add(year + "-" + i);
}
}
return months;
}