目录
1、Map<Object,Object>的value排序,倒序,升序
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;
}