時間帯のインターリーブデータマージ(統合)処理

1646 ワード

言語Java実装内容は、一列の時間帯が統合されて交差する場合の時間帯である(データ順は、開始時間が小さい順に並べられていることが前提である).
  • データ構造
  • #  start end  Date    
    [
        {
            "start": "2019-05-10 10:00:00",
            "end": "2019-05-10 11:30:00"
        },
        {
            "start": "2019-05-10 10:30:00",
            "end": "2019-05-10 11:00:00"
        },
        {
            "start": "2019-05-10 11:00:00",
            "end": "2019-05-10 12:00:00"
        },
        {
            "start": "2019-05-10 13:00:00",
            "end": "2019-05-10 14:00:00"
        },
        {
            "start": "2019-05-10 13:30:00",
            "end": "2019-05-10 15:00:00"
        }
    ]
    
  • メソッド
    for (int i = 0; i < list.size(); i++) {    //list    : List Data    json  
        Data dataI=list.get(i);
        for (int j = i+1; j < list.size(); j++) {
            Data dataJ=list.get(j);
            if (dataI.getEnd().compareTo(dataJ.getStart())>=0&&dataI.getEnd().compareTo(dataJ.getEnd())<=0){
                dataI.setEnd(dataJ.getEnd());
                list.remove(j);
                j--;
            }else if(dataI.getEnd().compareTo(dataJ.getEnd())>=0){
                list.remove(j);
                j--;
            }else{
                break;
            }
            i=j;
        }
    }
    
  • 効果
  • [
        {
            "start": "2019-05-10 10:00:00",
            "end": "2019-05-10 12:00:00"
        },
        {
            "start": "2019-05-10 13:00:00",
            "end": "2019-05-10 15:00:00"
        }
    ]