zoukankan      html  css  js  c++  java
  • upj

    1.Git操作命令

    Git global setup
    git config --global user.name "轩靖奇"
    git config --global user.email "jones2035@163.com"
    
    Create a new repository
    git clone https://gitlab.ctbiyi.com/xuanjingqi_zz/data_filtering.git
    cd data_filtering
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master
    
    Push an existing folder
    cd existing_folder
    git init
    git remote add origin https://gitlab.ctbiyi.com/xuanjingqi_zz/data_filtering.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master
        
    
    
    Push an existing Git repository
    cd existing_repo
    git remote rename origin old-origin
    git remote add origin https://gitlab.ctbiyi.com/xuanjingqi_zz/data_filtering.git
    git push -u origin --all
    git push -u origin --tags
    

    2.getUrlWithParams 拼接功能

    public static String getUrlWithParams(String url, Map<String, String> params) {
        String paramsString = url;
        if (!paramsString.contains("?")) paramsString += "?";
        for (Map.Entry<String, String> entry:params.entrySet()) {
            if (!paramsString.endsWith("&")) paramsString += "&";
            paramsString += entry.getKey()+"="+entry.getValue()+"&";
        }
        return paramsString.substring(0,paramsString.length()-1);
    }
    

    for (Map.Entry<String, String> entry:params.entrySet()) {}

    3.NumberFormat

    java对文字, 数字的格式化,是有一个公共的父类的Format
    NumberFormat和DecimalFormat都是它的子类*关于数字的*
    DateFormat和SimpleDateFormat也是它的子类关于文字的

    NumberFormat和DecimalFormat是线程不安全的

    NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定十进制数字,或者数字格式是否为十进制。

    DecimalFormat是NumberFormat十进制数字格式的具体子类 。它具有多种功能,旨在解析和格式化任何语言环境中的数字,包括支持西方,阿拉伯语和印度语数字。它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。所有这些都可以本地化。
    获取NumberFormat实例

    //创建 一个整数格式 地区用系统默认的
    NumberFormat integerNumber = NumberFormat.getIntegerInstance(Locale.getDefault());

    使用getInstance或getNumberInstance获取正常的数字格式。
    使用getIntegerInstance得到的整数格式。
    使用getCurrencyInstance来获取货币数字格式。
    使用getPercentInstance获取显示百分比的格式
    
    NumberFormat numberFormat = NumberFormat.getInstance();
    // 设置精确到小数点后5位
    numberFormat.setMaximumFractionDigits(4);
    numberFormat.setRoundingMode(RoundingMode.DOWN);
    String res = numberFormat.format((float) managedCount / (float) netElementTotal * 100);
    String netElementRate = res + "%";
    result.put("netElementRate", netElementRate);
    

    4. java8分别对于Map的key和value值进行排序

    1、map 根据value排序

    Map<String,BigDecimal> map =new HashMap<>();
    map.put(“one”, 0.08);
    map.put(“two”, 0.1);
    map.put(“three”, 0.2);
    map.put(“four”, 0.91);
    上面是项目中的一个中间结果,我们需要对这个map根据value值倒序排序,下面给出工具类:

    public <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
            Map<K, V> result = new LinkedHashMap<>();
     
            map.entrySet().stream()
                    .sorted(Map.Entry.<K, V>comparingByValue()
                            .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
            return result;
        }
    

    2、map 根据key排序
    想根据map的key进行排序,需要对上面的工具类进行小小的修改,代码如下:

    public <K extends Comparable<? super K>, V > Map<K, V> sortByKey(Map<K, V> map) {        Map<K, V> result = new LinkedHashMap<>();         map.entrySet().stream()                .sorted(Map.Entry.<K, V>comparingByKey()                        .reversed()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));        return result;    }
    

    我们可以看到,如果我们需要根据key排序,就需要让key 继承 Comparable ,也就说我们需要对待排序的字段继承 Comparable接口。另一个问题就是,上面的这种写法排序效果是 降序排序,如果我们需要升序排序的话,只需要将上面的.reversed()关键字限制去掉即可。

    public <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {        Map<K, V> result = new LinkedHashMap<>();         map.entrySet().stream()                .sorted(Map.Entry.<K, V>comparingByValue()                        ).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));        return result;    }
    

    5.时间(7天)

      private List<String> getDaysBetwwen(int days) {        List<String> dayss = new ArrayList<>();        Calendar start = Calendar.getInstance();        start.setTime(getDateAdd(days));        Long startTIme = start.getTimeInMillis();        Calendar end = Calendar.getInstance();        end.setTime(new Date());        Long endTime = end.getTimeInMillis();        Long oneDay = 1000 * 60 * 60 * 24l;        Long time = startTIme;        while (time <= endTime) {            Date d = new Date(time);            DateFormat df = new SimpleDateFormat("yyyyMMdd");            dayss.add(df.format(d));            time += oneDay;        }        return dayss;    }
    
    private Date getDateAdd(int days) {        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");        Calendar c = Calendar.getInstance();        c.add(Calendar.DAY_OF_MONTH, -days);        return c.getTime();    }
    
    List<DcResManageResult> dcResManageResults = dcResManageResults1.stream().sorted(Comparator.comparing(DcResManageResult::getCheckItem)).collect(Collectors.toList());
    

    6.日期比较方式之Date的after和before

    1. after/before

    使用after/before进行日期比较时注意:
    date1.after(date2)
    当date1大于date2时,返回true,当小于等于时,返回false;

    date1.before(date2)
    当date1小于date2时,返回true,当大于等于时,返回false.

    !currentDate.before(startDate) && !currentDate.after(engMPTask.getEndDate())
    

    相当于

    currentDate.getTime() >= startDate.getTime() && currentDate.getTime() <= engMPTask.getEndDate().getTime()
    

    2. 用date.getTime() 返回long,再进行比较

    if(dt1.getTime() < dt2.getTime()) {}
    

    //-------------------
    ZonedDateTime.now():获取当前时间

    3. compareTo

    两个Date类型的变量可以通过compareTo方法来比较。此方法的描述是这样的:如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。
    实际上比较的是自1970 年 1 月 1 日 00:00:00 GMT以来的毫秒数。毫秒数越大的时间越大。

    String DateStr1 = "2011-10-1 10:20:16";String DateStr2 = "2011-10-07 15:50:35";DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dateTime1 = dateFormat.parse(DateStr1);Date dateTime2 = dateFormat.parse(DateStr2);int i = dateTime1.compareTo(dateTime2); System.out.println(i < 0);
    

    4. SimpleDateFormat的format方法将日期型转化成时间或日期的字符串,然后再比较字符串

    日期型转换为字符串:

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒SSS毫秒");  String str=sdf.format(date);
    

    beginTime.compareTo(endTime)<0时,开始时间小于结束时间

    注意:如果一个日期格式是2016-01-01,但是另一个日期格式是2016-1-1时,直接使用字符串进行比较就会存在问题。

    7.三种加载配置文件的方式

    三种方式加载properties配置文件
    1.三种加载方式的编码

    具体代码如下所示:

    public class PropertiesLoader {	public static void main(String[] args) throws IOException {		//方式一 、使用属性对象Properties和文件输入流对象FileInputStream加载properties配置文件。		Properties properties = new Properties();//创建属性对象		FileInputStream fileInputStream = new FileInputStream("D:\xxxx.properties");//创建文件输入流对象		properties.load(fileInputStream);		System.out.println("dispatcher.conn.thread="+properties.getProperty("dispatcher.conn.thread"));		System.out.println("dispatcher.request.thread="+properties.getProperty("dispatcher.request.thread"));		System.out.println("dispatcher.response.thread="+properties.getProperty("dispatcher.response.thread"));        		//注意:此处可以获取带双引号的值,需要双等号。		System.out.println("dispatcher.response.thread1="+properties.getProperty("dispatcher.response.thread1"));				//注意:此处获取的值为null,因为value被双引号包裹。		System.out.println("dispatcher.response.thread2="+properties.getProperty("dispatcher.response.thread2"));		System.out.println("===================================分割线1===================================");						//方式二、通过属性对象Properties和类加载器加载properties配置文件,注意配置文件的位置必须在src目录下。		Properties properties2 = new Properties();		InputStream in = PropertiesLoader.class.getClassLoader().getResourceAsStream("xxxx.properties");		properties2.load(in);		System.out.println("dispatcher.conn.thread="+properties2.getProperty("dispatcher.conn.thread"));		System.out.println("dispatcher.request.thread="+properties2.getProperty("dispatcher.request.thread"));		System.out.println("dispatcher.response.thread="+properties2.getProperty("dispatcher.response.thread"));				//注意:此处可以获取带双引号的值,需要双等号。		System.out.println("dispatcher.response.thread1="+properties2.getProperty("dispatcher.response.thread1"));		//注意:此处获取的值为null,因为value被双引号包裹。		System.out.println("dispatcher.response.thread2="+properties2.getProperty("dispatcher.response.thread2"));						System.out.println("===================================分割线2===================================");		//方式三、通过资源包对象ResourceBundle和基名(即文件前缀名)加载properties配置文件,注意配置文件的位置必须在src目录下。		ResourceBundle bundle = ResourceBundle.getBundle("xxxx2");		System.out.println("dispatcher.conn.thread="+bundle.getString("dispatcher.conn.thread"));		System.out.println("dispatcher.request.thread="+bundle.getString("dispatcher.request.thread"));		System.out.println("dispatcher.response.thread="+bundle.getString("dispatcher.response.thread"));				//注意:此处可以获取带双引号的值,需要双等号。		System.out.println("dispatcher.response.thread1="+bundle.getString("dispatcher.response.thread1"));				//注意此处会报异常,因为value被双引号包裹。		System.out.println("dispatcher.response.thread2="+bundle.getString("dispatcher.response.thread2"));			}}
    
    Resource resource = resourceLoader.getResource("classpath:resource.properties");        InputStream is = resource.getInputStream();        InputStreamReader isr = new InputStreamReader(is);        BufferedReader br = new BufferedReader(isr);        String data = null;        while((data = br.readLine()) != null) {            System.out.println(data);        }//---------------------------------------------------------------------new BufferedReader(new InputStreamReader(resourceLoader.getResource("classpath:resource.properties").getInputStream)))
    
      InputStream in = null;        Properties properties = null;        try {            in = fds.class.getResourceAsStream("/config/ems.yml");            System.out.println(in);            properties = new Properties();        } catch (Exception e) {            e.printStackTrace();        }        try {            properties.load(new InputStreamReader(in,"utf-8"));        } catch (IOException e) {            e.printStackTrace();        }        String logFilePath = properties.getProperty("logFilePath");        System.out.println(logFilePath);
    

    8. es 动态索引

    关键技术点: Spel表达式 (通过调用方法来获取新的索引名,方法内处理新索引名的生成逻辑)

    **实体类部分代码**

    从表达式中可以看出:esConfig 是一个bean,调用了getXX方法。

    @Document(indexName = "#{esConfig.getApiCallIndexName()}")public class ApiCallRecord {    /**     * 平台流水号     */    @Id    @Field(type = FieldType.Keyword)    private String transId;    。。。。。。    }
    

    动态索引Bean代码

    将改类注册成Bean,名称为“esConfig”,其中apiCallIndexNamePrefix,是索引的前缀(为了通用,让它从配置文件取,如果没有那么就设置默认值“api_call_rec_”),方法中的逻辑就是生成逻辑,这样就能够生成api_call_rec_yyyy_MM这样的索引了。

    @Component(value = "esConfig")public class ElasticSearchConfiguration {    @Value("${esConfig.apiCallIndexName:api_call_rec_}")    private String apiCallIndexNamePrefix;    public String getApiCallIndexName() {        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy_MM");        return apiCallIndexNamePrefix + LocalDateTime.now().format(formatter);    }}
    

    从Kibana中也能看到确实是生成了动态索引(我最开始是获取当前时间“秒”来测试的,每次处理逻辑后基本都会有新的索引创建。)

    9. CollectionUtils.isEmpty(集合)

    package org.apache.commons.collections;
    源码如下:

    public static boolean isEmpty(Collection coll) {        return coll == null || coll.isEmpty();    }
    

    CollectionUtils.isEmpty(集合) 用来对集合null和空的判断

    10.数据库地址

    ?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    
  • 相关阅读:
    构建git+gerrit+repo的Android代码服务器
    简单学习:repo入门
    git checkout 命令详解
    python学习第一天
    window下的git工具msysgit的使用
    git基本操作
    echarts 使用示例
    管道命令
    jquery修改文档结构
    JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/jqpy1994/p/15102698.html
Copyright © 2011-2022 走看看