builder & Generics

本文介绍了一个用于构建Elasticsearch查询参数的Java类EsJobQueryParam,该类通过Builder模式实现,支持设置分片项、总分片数、查询开始和结束时间等属性,适用于批量数据处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.eloancn.back.submitted.service.helper;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * builder for dy query param
 *
 * @author zhengdalong
 * @version V1.0
 * @date 2019/1/10 7:39 PM
 */
public class EsJobQueryParam<Q> {

    private final Integer shardingItem;
    private final Integer shardingTotalCount;
    private final Date queryBeginTime;
    private final Date queryEndTime;
    private final Q q;

    EsJobQueryParam(Builder<Q> builder) {
        this.shardingItem = builder.shardingItem;
        this.shardingTotalCount = builder.shardingTotalCount;
        this.queryBeginTime = builder.queryBeginTime;
        this.queryEndTime = builder.queryEndTime;
        this.q = builder.q;
    }

    public static class Builder<K2> {
        Integer shardingItem;
        Integer shardingTotalCount;
        Date queryBeginTime;
        Date queryEndTime;
        K2 q;

        private Builder() {
        }

        //static  K2 ?
        public static <K3> Builder<K3> builder() {
            return new Builder<K3>();
        }

        public Builder<K2> setShardingItem(Integer shardingItem) {
            this.shardingItem = shardingItem;
            return this;
        }

        public Builder<K2> setShardingTotalCount(Integer shardingTotalCount) {
            this.shardingTotalCount = shardingTotalCount;
            return this;
        }

        public Builder<K2> setQueryBeginTime(Date queryBeginTime) {
            this.queryBeginTime = queryBeginTime;
            return this;
        }

        public Builder<K2> setQueryEndTime(Date queryEndTime) {
            this.queryEndTime = queryEndTime;
            return this;
        }

        public Builder<K2> setKey(K2 q) {
            this.q = q;
            return this;
        }

        public EsJobQueryParam<K2> build() {
            return new EsJobQueryParam(this);
        }
    }

    private final static String FILED_SHARDING_ITEM = "shardingItem";
    private final static String FIELD_SHARDING_TOTAL_COUNT = "shardingTotalCount";
    private final static String FIELD_QUERY_BEGIN_TIME = "queryBeginTime";
    private final static String FIELD_QUERY_END_TIME = "queryEndTime";

    public Map<String, Object> parse() {
        Map<String, Object> param = new HashMap<>();
        param.put(FILED_SHARDING_ITEM, shardingItem);
        param.put(FIELD_SHARDING_TOTAL_COUNT, shardingTotalCount);
        param.put(FIELD_QUERY_BEGIN_TIME, queryBeginTime);
        param.put(FIELD_QUERY_END_TIME, queryEndTime);
        return param;
    }

    public Integer getShardingItem() {
        return shardingItem;
    }

    public Integer getShardingTotalCount() {
        return shardingTotalCount;
    }

    public Date getQueryBeginTime() {
        return queryBeginTime;
    }

    public Date getQueryEndTime() {
        return queryEndTime;
    }

    public Q getQ() {
        return q;
    }


}

转载于:https://my.oschina.net/payzheng/blog/2999984

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值