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;
}
}