Section
section是一个区间merge工具类,工具类采用泛型+Comparator+递归来实现通用性处理,并预留data merge SPI提供具体的数据merge策略。
Usage
Create section
使用Section提供的工厂方法build来创建对象
1 | Section<T> build(int startDate, int endDate, T data, Comparator comparator, DataProcessor<T> dataProcessor) |
Merge method
merge one to one
1 | List<Section<T>> merge(Section<T> source, Section<T> target) |
merge one to List
1 | List<Section<T>> merge(Section<T> source, List<Section<T>> target, boolean mergeSelf) |
merge List to one
1 | List<Section<T>> merge(List<Section<T>> source, Section<T> target, boolean mergeSelf) |
merge List to List
1 | List<Section<T>> merge(List<Section<T>> source, List<Section<T>> target) |
Comparator
merge对象比较使用,用于判断两个数据是否可以合并,例如:
1 | public static class SectionComparator implements Comparator<SectionModel> { |
interface DataProcessor
T dataMerge(T source, T target);
}1
#### Default Handler
public static class DefaultDataProcessor
@Override
public T dataMerge(T source, T target) {
return target;
}
}
1 |
|
@Test
public void buildTest() {
SectionModel sectionModel = new SectionModel();
sectionModel.setStartDate(20150101);
sectionModel.setEndDate(20160101);
sectionModel.setDay(10);
sectionModel.setDesc("123");
Section<SectionModel> section = Section.build(sectionModel);
SectionModel sectionModel2 = new SectionModel();
sectionModel2.setStartDate(20151001);
sectionModel2.setEndDate(20160601);
sectionModel2.setDay(10);
sectionModel2.setDesc("1234");
Section<SectionModel> section2 = Section.build(sectionModel2);
List<Section<SectionModel>> sectionList = Section.merge(section,section2);
System.out.println(sectionList);
}
1 | ### merge result |
[Section{startDate=20150101, endDate=20150930, data=SectionModel{startDate=20150101, endDate=20160101, day=10, desc=123}}, Section{startDate=20151001, endDate=20160601, data=SectionModel{startDate=20151001, endDate=20160601, day=10, desc=1234}}]
```