时间段合并去重

原时间段:08:00-10:00,17:00-18:00,09:00-13:00,12:00-15:00,17:00-18:00,09:00-13:00
处理后:08:00-15:00,17:00-18:00
*自动过滤无效时间段;
*时间格式自行校验;

	public static void main(String[] args) {
        String str = "08:00-10:00,17:00-18:00,09:00-13:00,12:00-15:00,17:00-18:00,09:00-13:00";
        System.out.println(unRedoMergeTime(str));
    }

	public static String unRedoMergeTime(String str) {
        // 去重
        Set<String> set = new HashSet<>(Arrays.asList(str.split(",")));
        // 排序
        List<String> list = new ArrayList<>(set);
        Collections.sort(list);
        list.forEach(time -> {
            System.out.println(time);
        });
        // 合并
        List<String> newList = new ArrayList<>();
        newList.add(list.get(0));
        int len = list.size();
        String swap = list.get(0);
        for (int i = 1; i < len; i++) {
            swap = mySplit(newList, swap, list.get(i));
        }
        // 还原String
        return String.join(",", newList);
    }

    public static String mySplit(List<String> newList, String tim1, String tim2) {
        int s1 = Integer.parseInt(tim1.split("-")[0].replace(":", ""));
        int e1 = Integer.parseInt(tim1.split("-")[1].replace(":", ""));
        int s2 = Integer.parseInt(tim2.split("-")[0].replace(":", ""));
        int e2 = Integer.parseInt(tim2.split("-")[1].replace(":", ""));

		// 过滤无效时间段(起始时间大于结束时间)
        if (newList.size() == 1 && s1 > e1) {
            newList.remove(tim1);
            newList.add(tim2);
            return newList.get(newList.size() - 1);
        }
        if (s2 > e2)
            return newList.get(newList.size() - 1);

        if (s2 > e1) {
            newList.add(tim2);
        } else if (s2 <= e1) {
            if (e2 >= e1) {
                newList.remove(tim1);
                newList.add(tim1.split("-")[0] + "-" + tim2.split("-")[1]);
            }
        }
        return newList.get(newList.size() - 1);
    }

输出:

08:00-10:00,17:00-18:00,09:00-13:00,12:00-15:00,17:00-18:00,09:00-13:00

08:00-15:00,17:00-18:00
<think>好的,我需要帮助用户了解在FineBI中如何对时间字段进行处理。首先,我得回想一下FineBI的相关功能和用户提到的引用内容。 根据引用[2],FineBI有上下合并和左右合并的功能,合并时会根据相同字段名自动合并,但可能需要手动调整。不过用户的问题是关于时间字段,这可能涉及到数据清洗或处理复值。 通常,数据的方法可能包括使用分组聚合或者步骤。在数据准备阶段,可能需要使用分组汇总,按时间字段分组,这样复的时间值会被合并。或者使用“”功能,直接删除复的记录。 查看引用[4],提到计算字段会根据维度动态调整,比如月份。这可能意味着在处理时间维度时,系统会自动处理某些计算,但不确定是否直接涉及。 另外,引用[3]提到FineBI可以连接多种数据源,数据准备是基础。所以可能是在数据准备阶段完成的。 可能的步骤是:在数据准备中选择对应数据集,找到时间字段,使用分组或功能。比如,分组汇总,选择时间字段,然后聚合方式选“任意”或其他,这样复项会被合并。或者使用“”步骤,直接删除复行,依据时间字段。 需要确认FineBI的具体操作路径,可能是在数据处理的步骤中添加“分组汇总”或“”操作,选择需要时间字段即可。同时,用户可能需要手动调整合并依据,如引用[2]所述,但可能更直接。 最后,生成相关问题时要围绕时间字段处理、数据清洗方法、合并的区别等。</think>在FineBI中对时间字段进行处理,可以通过以下步骤实现: 1. **数据准备阶段** 在数据准备模块中,选择需要处理的数据集,点击「+」添加「分组汇总」步骤。选择时间字段作为分组字段,聚合方式选择「任意」或保留首个值,系统会自动合并时间值[^2][^3]。 2. **使用功能** 通过添加「」步骤,勾选时间字段作为依据。FineBI会保留该字段的第一个唯一值,自动删除后续复记录。例如对「订单创建时间」字段时,相同时间戳的记录仅保留一条[^4]。 ```plaintext 操作路径:数据集编辑界面 → 添加步骤 → 选择「」→ 勾选时间字段 ``` 3. **动态维度调整** 若在分析过程中需要动态,可将时间字段拖入维度栏,FineBI会根据当前维度自动过滤复值。例如将「日期」字段作为维度时,图表会自动展示唯一日期序列[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值