Java开发常用小功能干货分享(建议收藏)

Java开发常用小功能干货分享


个人开发时记录的一些笔记分享


1.项目启动

jar包启动:
方式一:进程停止,服务停止
java -jar 'jar包名'
方式二:服务一直运行
nohup java -jar /home/jgt/jgt-admin.jar > /dev/null 2> /dev/null &

查看占用进程
netstat -ano | findstr :31902
taskkill -pid 36736 -f

2.错误码

400 (错误请求) 请求要求必须的参数,及参数类型
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应
403 (禁止) 服务器拒绝请求
404 (未找到) 服务器找不到请求的网页
405 (方法禁用) 禁用请求中指定的方法,检查请求方式(get/post)
500 (服务器内部错误)
501 (服务器无法识别请求方法)
502Bad Gateway错误)
503 (服务器目前无法使用)
504 (无法请求网关)
505 (服务器不支持请求中所用的 HTTP 协议版本)

3.JSON互转

对象转json:String json = JSON.toJSONString(student);
jsonStr转对象:Student student = JSON.parseObject(jsonStr,Student.class);
StringJSONObjectJSONObject jsonObj = JSON.parseObject(str);
JSONObjectStringString str = JSON.toJSONString(jsonObj);
JSONObject转对象:Student student = JSONObject.toJavaObject(jsonObj, Student.class);
JSONArray转对象list:List<Student> studentList = JSONArray.parseArray(jsonArrayStr, Student.class);
list转JSONArrayJSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(studentList));

map转对象:User user = JSON.parseObject(JSON.toJSONString(obj), User.class);
mapList转对象list:List<User> userList = JSON.parseArray(JSON.toJSONString(mapList), User.class);

4.mysql

docker exec -it mysql bash # 进入mysql容器
mysql -u root -p # 登录mysql
show variables like 'max_connections'; # 查看最大连接数
set global max_connections=2000; # 修改最大连接数
flush privileges; # 刷新权限
show variables like 'max_connections'; # 查看最大连接数

mysql查询编写顺序:
select
from
join on
where
group by
having
order by
limit

mysql查询执行顺序:
from
on
join
where
group by
having
select
distinct
order by
limit

查询判断:case when 条件 then 结果1(条件成立) else 结果2
查询分组排序:row_number() over(),执行晚于 where 、group by
row_number() over(partition by 分组列 order by 排序列 desc)

group by 和 order by 同时使用:
order by 必须包含在 group by 中
子查询 order by 后加上 limit

字段拼接:update bz_order set store_name = CONCAT('1',store_name)
还原字段默认值
update member set member_nick_name = DEFAULT(member_nick_name), member_true_name = DEFAULT(member_true_name) where member_mobile = '18559659316';

查询表中重复数据:
SELECT
	parking_name
FROM
	property_parking_fee
WHERE
	apartment_name = '南洋水岸'
GROUP BY
	parking_name
HAVING
	count( parking_name )> 1;

删除表中重复数据:
DELETE
FROM
	property_parking_fee
WHERE
	parking_fee_id NOT IN ( SELECT parking_fee_id FROM ( SELECT min( parking_fee_id ) AS parking_fee_id FROM property_parking_fee WHERE apartment_name = '南洋水岸' GROUP BY parking_name ) A );

多个条件中选择一个的单条件查询
choose-when-ortherwise,相当于switch-case-default
<select id="selByCondition2" resultMap="rm">
    select *
    from mybatis where
    <choose>
        <when test="status !=null">
            STATUS=#{STATUS}
        </when>
        <when test="companyName !=null and companyName !=''">
            company_name like #{companyName}
        </when>
        <when test="bracdName !=null and bracdName !=''">
            bracd_name like #{bracdName}
        </when>
        <otherwise>1=1</otherwise>
    </choose>
</select

5.mongodb

查询集合中重复数据(查询字段deviceId在集合sr_metadata_event_log中是否存在重复数据)
db.getCollection("sr_metadata_event_log").aggregate([
{$group:{_id:'$deviceId',count:{$sum:1}}},
{$match:{count:{$gt:1}}}
],{allowDiskUse:true})

6.list互转

list转StringStringUtils.join(list,',')
逗号隔开String转list:List<String> list = Arrays.asList(url.split(","));

List<ProductVO> productList = page.getRecords().stream().map(record -> BeanUtil.copyProperties(record, ProductVO.class);
        }).collect(Collectors.toList());

list整形字段求和:list.stream().mapToInt(E::getValue()).sum()

list金额字段求和:list.stream().map(E::getValue()).reduce(BigDecimal.ZERO, BigDecimal::add);

对象list转idList:List<Long> storeIdList = vendors.stream().map(Vendor::getStoreId).collect(Collectors.toList());

统计集合中符合条件的数据数量:long count = list.stream().filter(s -> s.getId() == 1).count();

统计集合中符合条件的数据:List<Demo> demoList = list.stream().filter(s -> s.getNum() == 2).collect(Collectors.toList());

两个list去重:List<String> collect = Stream.of(list, list1).flatMap(Collection::stream).distinct().collect(Collectors.toList());

list字段排序:List<OrderProduct> orderProductList = orderProductList.stream().sorted(Comparator.comparing(OrderProduct::getOrderSn)).collect(Collectors.toList());

list过滤后排序再取值:List<String> orderProductList = orderProductList.stream().filter(orderProduct -> orderProduct.getProductNum().equals(20))
                                .sorted(Comparator.comparing(OrderProduct::getOrderSn).reversed()).map(OrderProduct::getOrderSn).collect(Collectors.toList());

list分组:Map<Long, List<Cart>> mapByOne = storeCartList.stream().collect(Collectors.groupingBy(Cart::getBranchStoreId));

将学生成绩为空的同学记上0分返回:List<Student> peekStudents = students.stream().filter(student -> student.getScore() == null).peek(student -> student.setScore(0))
                                        .collect(Collectors.toList());

list删除:list.removeIf(item -> item.getBranchStoreId().equals(storeCartGroup.getBranchStoreId()));

list去掉前2个元素:List<User>> list = userList.stream().skip(2).collect(Collectors.toList());

list获取前2个元素:List<User>> list = userList.stream().limit(2).collect(Collectors.toList());

int类型转LongList<Long> list = userList.stream().mapToLong(User::getAge).boxed().collect(Collectors.toList());

正向按中文排序:List<String> collatorNames = names.stream().sorted(Collator.getInstance(Locale.CHINA)).collect(Collectors.toList());

反向按中文排序:List<String> reverseOrderNames = names.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());

按照年龄进行排序,年龄相同则通过id进行排序:List<Student> collectStudents = students.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getId))
                .collect(Collectors.toList());

strings中是否有包含的元素:boolean anyMatchBcStrings = strings.stream().anyMatch(s -> s.contains("bc"));

检查集合中的元素是否都大于0boolean result = strings.stream().allMatch(s -> s>0);

检查集合中的元素长度是否都不大于5boolean result = strings.stream().noneMatch(s -> s.length()<5);

Iterator迭代器:Iterator<Integer> iterator = list.iterator();
                while (iterator.hasNext()) {
                    Integer next = iterator.next();
                    iterator.remove();
                }

entrySet()迭代:Set<Map.Entry<String, String>> entries = map.entrySet();
                for (Map.Entry<String, String>entry:entries){
                    String value = entry.getValue();
                    String key = entry.getKey();
                }

7.idea

修改git提交用户名
git config user.name
git config --global user.name "hedrick"
git config user.name

修改文件头
editor -- file and code templates

设置背景图
appearance -- UI options
或 双击shift:Set BackGround Image

常用插件
adapter for eclipse code formatter
Alibaba Cloud Toolkit
Alibaba Java Coding Guidelines
camelCase
Checkstyle
CodeGlance
Free MyBatis Tool
generateAllSetter
google-java-format
MyBatis Log Free
MyBatisCodeHelperPro
MybatisX
RestfulTool
Translation

8.日期

java日期转换
ISO8601格式,需引入hutool依赖
2023-12-12T14:47:53+08:00 转换成 "yyyy-MM-dd HH:mm:ss"
Date date = DateUtil.parse(utcString); //String类型 先转换为date类型
SimpleDateFormat s = new SimpleDateFormat(format); //格式化
s.format(date);

获取本月最后一天
LocalDate localDate = LocalDate.of(queryYear, queryMonth, 1);
int lastDayOfMonth = localDate.lengthOfMonth();

DateLocalDateTimeDate date = new Date();
// 方法一
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
// 方法二
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
LocalDateTimeDate:
LocalDateTime localDateTime = LocalDateTime.now();
Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
字符串转LocalDateTime:
LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
LocalDateTime转字符串:
localDateTime.format(DateTimeFormatter.ofPattern(pattern);

9.其他

map存入相同key:IdentityHashMap<String,String> map = new IdentityHashMap();
                map.put(new String("k1"),"A");
                map.put(new String("k1"),"B");
                System.out.println(map);

循环依赖:SpringContextUtil.getBean(CountryService.class).findOneById();

四舍五入(向下取整):BigDecimal.ROUND_HALF_UP
向上取:BigDecimal.ROUND_UP
向下取:BigDecimal.ROUND_DOWN

10.未完待续

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 数组是存储相同类型数据的集合,它们具有固定大小并且在创建后大小不可更改。在Java中,数组通过声明和初始化来创建。声明数组的语法形式如下: ```java int[] arr; // 声明了一个 int 类型的数组 ``` 在声明数组之后,需要通过初始化该数组,也就是为数组分配内存和赋初值。初始化数组的方式有两种:静态初始化和动态初始化。静态初始化是在声明数组的同时给数组元素赋初值的方法,语法形式如下: ```java int[] arr = {1, 2, 3, 4, 5}; // 静态初始化数组 ``` 动态初始化是在声明数组后通过循环或用户输入等方式给数组元素赋值的方法,语法形式如下: ```java int[] arr = new int[5]; // 动态初始化数组 for (int i = 0; i < arr.length; i++) { arr[i] = i + 1; } ``` Java 数组还具有一些常用的属性和方法,如`length`属性用来获取数组的长度,`clone()`方法用来复制数组,`toString()`方法用来将数组转换为字符串等。 除了一维数组外,Java 还支持多维数组,如二维数组、三维数组等。多维数组的声明和初始化方式与一维数组类似,只是需要使用多个`[]`来表示维度。 值得注意的是,Java 中的数组是引用类型,因此在传递数组参数时,实际上传递的是数组的引用,而不是数组的副本。这意味着在方法中对数组的修改会影响到原数组。 总的来说,了解和掌握 Java 数组的声明、初始化、属性和方法,并能灵活运用,对于 Java 编程是非常重要的。希望本文能够为大家提供关于 Java 数组的全面解析和干货知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值