java 时间合并_时间段或时间点,合并。

时间段或时间点,合并。

package algorithms;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

class Tree {

public class TimeTree {

private String value;

private String type;

private TimeTree left;

private TimeTree right;

private int num;

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public TimeTree getLeft() {

return left;

}

public void setLeft(TimeTree left) {

this.left = left;

}

public TimeTree getRight() {

return right;

}

public void setRight(TimeTree right) {

this.right = right;

}

}

public List periodType = Arrays.asList("begin","end");

//添加节点

public TimeTree putTime(TimeTree tree, String time, String type) {

if (tree == null) {

tree = new TimeTree();

tree.setValue(time);

tree.setType(type);

tree.setNum(1);

}

else if (tree.value.compareTo(time) > 0) {

tree.left = putTime(tree.left, time, type);

}

else if (tree.value.compareTo(time) < 0) {

tree.right = putTime(tree.right, time, type);

}

else if (tree.value.compareTo(time) == 0

&& (!tree.type.equals(type) && periodType.contains(tree.type) && periodType.contains(type))) {

--tree.num;

if (tree.num == 0){

tree.setType("point");

}

}

else if (tree.value.compareTo(time) ==0

&& tree.type == type) {

tree.setNum(1+tree.getNum());

}

else if (tree.value.compareTo(time) ==0

&& tree.type.equals("point")) {

}

return tree;

}

public static void main(String args[]) {

Tree tree = new Tree();

TimeTree node = null;

node = tree.putTime(node, "03", "begin");

node = tree.putTime(node, "07", "end");

node = tree.putTime(node, "03", "begin");

node = tree.putTime(node, "04", "end");

node = tree.putTime(node, "02", "begin");

node = tree.putTime(node, "03", "end");

node = tree.putTime(node, "07", "begin");

node = tree.putTime(node, "08", "end");

node = tree.putTime(node, "04", "point");

node = tree.putTime(node, "07", "point");

node = tree.putTime(node, "02", "point");

node = tree.putTime(node, "10", "point");

node = tree.putTime(node, "06", "begin");

node = tree.putTime(node, "09", "end");

List btList = new ArrayList<>();

tree.orderTree(node, btList);

List periodList = tree.TransList(btList);

for (Periods period: periodList) {

System.out.print(period.getBegin() + ",");

System.out.print(period.getEnd());

System.out.println();

}

}

//二叉树中序排序

public void orderTree(TimeTree node, List btList) {

if (node.getLeft() != null) {

orderTree(node.getLeft(), btList);

}

for (int i=0; i

String[] nodes = new String[]{node.getValue(),node.getType()};

btList.add(nodes);

}

if (node.getRight() != null) {

orderTree(node.getRight(), btList);

}

}

//

public class Periods {

private String begin;

private String end;

public String getBegin() {

return begin;

}

public void setBegin(String begin) {

this.begin = begin;

}

public String getEnd() {

return end;

}

public void setEnd(String end) {

this.end = end;

}

}

//游标提取

public List TransList(List orderList) {

List periodList = new ArrayList<>();

int beginNum = 0;

int endNum = 0;

String beginValue = "";

boolean flag = false;

for (String[] order: orderList) {

if (!flag) {

if (order[1].equals("begin")) {

beginValue = order[0];

++beginNum;

flag = true;

}

else if (order[1].equals("point")) {

Periods periods = new Periods();

periods.setBegin(order[0]);

periods.setEnd(order[0]);

periodList.add(periods);

flag = true;

}

}

else if (order[1].equals("begin")) {

++beginNum;

}

else if (order[1].equals("end") && beginNum != endNum) {

++endNum;

}

if (order[1].equals("end") && beginNum == endNum) {

Periods periods = new Periods();

periods.setBegin(beginValue);

periods.setEnd(order[0]);

periodList.add(periods);

//重设

beginNum = 0;

endNum = 0;

beginValue = "";

flag = false;

}

}

return periodList;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值