1.将source中spitNumber对应的content按序拼接,并按rowNumber返回拼接后的content集合
/**
* 将内容查询结果转换成页面所需格式的数据
*/
private List<String> sqlInfosFormat(List<TempAutoSqlInfo> sources) {
// 使用Stream API进行分组、排序和拼接
return sources.stream()
.collect(Collectors.groupingBy(
// 按照rowNumber分组
TempAutoSqlInfo::getRowNumber,
Collectors.collectingAndThen(
Collectors.toList(),
list -> list.stream()
// 按splitNumber排序后拼接
.sorted(Comparator.comparingInt(TempAutoSqlInfo::getSplitNumber))
// 拼接content
.map(tempAutoSqlInfo ->
tempAutoSqlInfo.getCaseContent() != null
? tempAutoSqlInfo.getCaseContent() : "")
.collect(Collectors.joining())
)
))
// 将 Map 转换为包含拼接后 content 的 List
.entrySet().stream()
// 结果按rowNumber排序
.sorted(Map.Entry.comparingByKey())
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
2.取两个集合的差集
private List<BuildAnalysisCase> failThisTime(List<BuildAnalysisCase> thisFailCases, List<BuildAnalysisCase> lastFailCases) { // 使用stream求对象集合的差集:ListA中除了不包含ListB中的所有元素 return thisFailCases .stream() //获取第一个集合的stream .filter( analysisCase -> lastFailCases.stream() //获取第二个集合的Stream3 .map(BuildAnalysisCase::getCaseKey) .noneMatch( caseKey -> Objects.equals(analysisCase.getCaseKey(), caseKey) //判断id的值是否相等 ) ).collect(Collectors.toList()); }
3.取两个集合的交集
private List<BuildAnalysisCase> failLastTimeToo(List<BuildAnalysisCase> thisFailCases, List<BuildAnalysisCase> lastFailCases) { // 使用stream求对象集合的交集:两次构建中均失败的用例,即两个集合的交集 return thisFailCases .stream() //获取第一个集合的stream .filter( analysisCase -> lastFailCases.stream() //获取第二个集合的Stream3 .map(BuildAnalysisCase::getCaseKey) .anyMatch( caseKey -> Objects.equals(analysisCase.getCaseKey(), caseKey) //判断id的值是否相等 ) ).collect(Collectors.toList()); }