JAVA 工具类碎片整理【模板化,持续更新】

本文介绍了如何对Map中value进行升序和降序排序,包括BigDecimal的加减乘除运算以及比较方法,同时提供了一个Java工具类用于调整秒数并给出了Windows10关闭特定端口的步骤。
摘要由CSDN通过智能技术生成

目录

1、Map<Object,Object>的value排序,倒序,升序

2、BigDecimal的加减乘除

3、BigDecimal的比较大小

4、秒数调整为上一个整数秒

5、Windows10关闭指定端口,如jar的启动端口号

6、使用List中的某一个属性进行升序,或降序

7、将一个List拆分为子集合,顺序不变


1、Map<Object,Object>的value排序,倒序,升序

// 从大到小排序
        Map<String, BigDecimal> sortedMap = convertedMap.entrySet()
                .stream()
                .sorted(Map.Entry.<String, BigDecimal>comparingByValue().reversed())
                .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().setScale(2, RoundingMode.DOWN), (e1, e2) -> e1, LinkedHashMap::new));



// 从小到大排序
        Map<String, BigDecimal> sortedMap = convertedMap.entrySet()
                .stream()
                .sorted(Map.Entry.<String, BigDecimal>comparingByValue())
                .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().setScale(2, RoundingMode.DOWN), (e1, e2) -> e1, LinkedHashMap::new));

注:
1、convertedMap是原数据,源数据替换这里即可
2、reversed()是用来逆序排序的方法

2、BigDecimal的加减乘除

        //加法
        BigDecimal result1 = num1.add(num2);
 
        //减法
        BigDecimal result2 = num1.subtract(num2);
 
        //乘法
        BigDecimal result3 = num1.multiply(num2);
 
        //除法
        BigDecimal result4 = num1.divide(num2,2, RoundingMode.DOWN);

3、BigDecimal的比较大小

A 大于 B:
if (numA.compareTo(numB) > 0) {
    System.out.println("A 大于 B");
}

B 小于 A:
if (numB.compareTo(numA) < 0) {
    System.out.println("B 小于 A");
}

A 大于等于 B:
if (numA.compareTo(numB) >= 0) {
    System.out.println("A 大于等于 B");
}

B 小于等于 A:
if (numB.compareTo(numA) <= 0) {
    System.out.println("B 小于等于 A");
}

A 等于 B:
if (numA.compareTo(numB) == 0) {
    System.out.println("A 等于 B");
}

4、秒数调整为上一个整数秒

public class TimeUtils {

    /**
     * 获取当前时间的上一个整数 秒 时间
     * 例如: 当前时间为 2024-01-10 17:00:23 那么调用改工具类后 得到的结果为  2024-01-10 17:00:20
     * <p>
     * 时分秒的获取用到了 hutool工具类
     *
     * @param hour   时  DateUtil.hour(date,true);   true 为24小时制
     * @param minute 分  DateUtil.minute(date);
     * @param second 秒  DateUtil.second(date);
     * @return 秒数调整为上一个整数秒
     */
    public static LocalTime previousIntegerTime(int hour, int minute, int second) {
        LocalTime currentTime = LocalTime.of(hour, minute, second); // 你的当前时间

        // 获取秒数部分
        int seconds = currentTime.getSecond();

        // 调整秒数部分为最接近的整数秒
        int adjustedSeconds = seconds - (seconds % 10); // 将秒数调整为最接近的整数秒

        // 构建新的时间,保持小时和分钟不变,秒数调整为上一个整数秒
        LocalTime previousIntegerTime = LocalTime.of(currentTime.getHour(), currentTime.getMinute(), adjustedSeconds);

        return previousIntegerTime;
    }
}

5、Windows10关闭指定端口,如jar的启动端口号

1、输入 netstat -ano | findstr xxx  来查看占用该端口的进程PID

2、如上图,查询出来的  14132 就是PID

3、再通过PID查询 进程名 指令如下:

tasklist | findstr PID

4、最后使用 taskkill -f -t -im 进程名  关闭进程即可

6、使用List<Object>中的某一个属性进行升序,或降序

举例说明:

        List<Person> personList= new ArrayList<>();
        personList.add(new Person("张三", 30));
        personList.add(new Person("李四", 25));
        personList.add(new Person("王五", 35));

        // 升序排序
        Collections.sort(personList, Comparator.comparing(Person::getAge));
     

        // 降序排序
        Collections.sort(personList, Comparator.comparing(Person::getAge).reversed());
     

7、将一个List<Object>拆分为子集合,顺序不变

 /**
     * 将一个List<List<BigDecimal>>类型的列表均匀地拆分为指定数量的子列表。
     * @param originalList 要拆分的原始列表。
     * @param parts 想要得到的子列表数量。
     * @return 包含所有子列表的列表。
     */
    public static List<List<List<BigDecimal>>> divideOuterListEvenly(List<List<BigDecimal>> originalList, int parts) {
        List<List<List<BigDecimal>>> dividedLists = new ArrayList<>();
        int listCount = originalList.size();
        int partSize = (int)Math.ceil(listCount / (double)parts); // 计算每个分区大致应含的内部列表数

        for (int i = 0; i < parts; i++) {
            int start = i * partSize;
            int end = Math.min(start + partSize, listCount);
            dividedLists.add(new ArrayList<>(originalList.subList(start, end)));
        }

        return dividedLists;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值