/**
* 求划线、评论的并集
*
* @param sourceList
* @param flag:true:只要评论划线的id;false:所有划线的id都要
* @return
*/
private List<ArticleHighlightDto> unionList(List<ArticleHighlightDto> sourceList, Boolean flag) {
if (CollectionUtils.isEmpty(sourceList)) {
return new ArrayList<>();
}
//按照起点排序
sourceList = sourceList
.stream()
.sorted(Comparator.comparing(ArticleHighlightDto::getStartPos))
.collect(Collectors.toList());
List<ArticleHighlightDto> unionList = new ArrayList<>();
unionList.add(sourceList.get(0));
//第一条是划线
if (flag && sourceList.get(0).getCommentFlag() != 1) {
sourceList.get(0).setId("");
}
for (int i = 1; i < sourceList.size(); i++) {
ArticleHighlightDto current = sourceList.get(i);
ArticleHighlightDto lastHightlight = unionList.get(unionList.size() - 1);
if (current.getStartPos() <= lastHightlight.getEndPos()) {
//新的起点大于旧的
if (current.getEndPos() > lastHightlight.getEndPos()) {
//交叉时,扩大终点
lastHightlight.setEndPos(current.getEndPos());
}
//包含或者半包含时,需要记录id
if (flag) {
if (current.getCommentFlag() == 1) {
//是评论划线
lastHightlight.setId(StringUtils.isBlank(lastHightlight.getId()) ? current.getId() : lastHightlight.getId() + "," + current.getId());
}
} else {
lastHightlight.setId(lastHightlight.getId() + "," + current.getId());
}
} else {
//新的一段:如果是划线
if (flag && current.getCommentFlag() != 1) {
current.setId("");
}
unionList.add(current);
}
}
return unionList;
}
求线段的并集
最新推荐文章于 2024-07-13 13:55:40 发布