Java使用Stream流实现分页|JS过滤List中相同属性值的对象|Mybatis中查询某字段长度大于指定值的数据|时间Date中保存成指定的MM-DD形式工具类

Java使用Stream流实现分页

有时候遇到些需要查询的复杂场景,但是又需要进行分页操作的情况,常常是多种情况查询的来的list 对象进行拼接,不同情况下,都add 到同一个List 中,这个时候用SQL查询,SQL写起来比较复杂,便因此,使用Stream流 进行分页操作处理。

代码如下:

List<VO> pageData = collect.stream()
        .skip((long) (parameter.getCurrent() - 1) * parameter.getSize())
        .limit(parameter.getSize())
        .collect(Collectors.toList());
parameter.setRecords(pageData);
parameter.setTotal(collect.size());

collect为多次组装的List数组,然后将其进行数据筛选,选出符合分页要求的数据List。

其中为过滤this.positions 中属性positionCode值相同的对象。

this.positions = this.positions.filter(function(obj, index, self) {
  return self.findIndex(function(innerObj) {
    return innerObj.positionCode === obj.positionCode;
  }) === index;
});

过滤List中重复的对象

使用 Set 数据结构,我们去除了重复的对象

使用 Set 数据结构去除重复对象,然后再转换回数组

let myFilteredArray = [...new Set(myArray)];

// 使用 Set 数据结构和 JSON.stringify 去除重复对象
let uniqueArray = Array.from(new Set(array.map(obj => JSON.stringify(obj))))
    .map(str => JSON.parse(str));
使用 Set 数据结构,避免重复添加
function removeDuplicatesByLocation(arr) {
  const seenLocations = new Set();
  const result = arr.filter(item => {
    if (seenLocations.has(item.location)) {
      // 如果location已存在,过滤掉这个元素
      return false;
    } else {
      // 否则,加入到结果数组中,并标记location为已见
      seenLocations.add(item.location);
      return true;
    }
  });
  return result;
}
let filteredList = removeDuplicatesByLocation(list);
console.log(filteredList);

Mybatis中查询某字段长度大于指定值的数据

代码如下:查询Position对象中 position_id 长度大于8 的数据内容,用于异常数据的检查出来,然后对异常数据进行修复调整操作。

public List<Position> findPositionsWhereIdLengthGreaterThanEight() {

        QueryWrapper<Position> queryWrapper = new QueryWrapper<>();

        queryWrapper.apply("LENGTH(position_id) > 8");

        return positionMapper.selectList(queryWrapper);

    }

时间Date中保存成指定的MM-DD形式工具类

将Date转换为MM-dd比较简单,但是需求中涉及到List<List<Date>> 的格式转换,下面也做了与JSON格式的相互转换操作。方便使用。

import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.text.SimpleDateFormat;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.text.ParseException;


/**
 * @Description: 时间格式转换MM-DD
 */
class CustomDateFormatter {
    public static String formatDate(Date date) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
        return dateFormat.format(date);
    }

    public static Date parseDate(String dateString) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd");
        return dateFormat.parse(dateString);
    }
}
public class DateToJsonConverter {

    public static String getMMDDJson(List<List<Date>> dateLists){
        List<List<String>> formattedDateLists = new ArrayList<>();
        for (List<Date> innerList : dateLists) {
            List<String> formattedInnerList = new ArrayList<>();
            for (Date date : innerList) {
                formattedInnerList.add(CustomDateFormatter.formatDate(date));
            }
            formattedDateLists.add(formattedInnerList);
        }
        // 转换为 JSON 字符串
        return toJsonString(formattedDateLists);
    }

    private static String toJsonString(List<List<String>> data) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (List<String> innerList : data) {
            sb.append("[");
            for (String dateString : innerList) {
                sb.append("\"").append(dateString).append("\",");
            }
            sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
            sb.append("],");
        }
        if (!data.isEmpty()) {
            sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
        }
        sb.append("]");
        return sb.toString();
    }

    public static List<List<Date>> jsonToData(String json) {
        // 从 JSON 中解析出 List<List<Date>>
        List<List<Date>> dateLists = parseJson(json);
        if (dateLists != null) {
            // 打印结果
            for (List<Date> innerList : dateLists) {
                for (Date date : innerList) {
                    System.out.println(date);
                }
            }
        }
        return dateLists;
    }

    private static List<List<Date>> parseJson(String json) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            List<List<String>> stringLists = objectMapper.readValue(json, new TypeReference<List<List<String>>>() {});

            List<List<Date>> dateLists = new ArrayList<>();
            for (List<String> innerList : stringLists) {
                List<Date> dateInnerList = new ArrayList<>();
                for (String dateString : innerList) {
                    try {
                        Date date = CustomDateFormatter.parseDate(dateString);
                        dateInnerList.add(date);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
                dateLists.add(dateInnerList);
            }

            return dateLists;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值