feilong-core 1.10.6 发布了。feilong-core 是一个让 Java 开发更简便的工具包, 可以让你从大量重复的底层代码中脱身,提高工作效率; 让你的代码更简炼,易写、易读、易于维护; 本次升级共有 20 处变更, 具体参见 1.10.6 milestone 1.10.6 文档地址: http://feilong-core.mydoc.io/ 首先预览下,本次发布的核心内容 : [Feature] #681 添加 ParamUtil.toNaturalOrderingKeyJoinValue(Map<String, String>) 新建 将key和map直接拼接的方法 将 singleValueMap 转成自然排序, 然后将key和value直接拼接成字符串(不使用 = 和& 分隔). 示例: Map<String, String> map = new HashMap<>(); map.put("service", "create_salesorder"); map.put("_input_charset", "gbk"); map.put("totalActual", "210.00"); map.put("address", "江苏南通市通州区888组888号"); LOGGER.debug(ParamUtil.toNaturalOrderingKeyJoinValue(map)); 返回: _input_charsetgbkaddress江苏南通市通州区888组888号servicecreate_salesordertotalActual210.00 #673 SortUtil 新增 Map<K, V> sortMapByKeyFixOrder(Map<K, V> map,K...keys) map 按照指定的固定key的顺序排序 按照key 指定名字顺序排序. 注意: 原 map 的顺序不变 示例: Map<String, Integer> map = new HashMap<>(); map.put("DE", 99); map.put("L", 3428); map.put("O", 13); map.put("UN", 17); map.put("S", 6); //L-上市,S-暂停,DE-终止上市,UN-未上市 Map<String, Integer> sortByKeyAsc = sortMapByKeyFixOrder(map, "L", "UN", "DE", "S", "O"); LOGGER.debug(JsonUtil.format(sortByKeyAsc)); 返回: { "L": 3428, "UN": 17, "S": 6, "DE": 99, "O": 13 } #674 AggregateUtil 新增可以按照 多个属性名字来 groupCount的方法 com.feilong.core.util.AggregateUtil.groupCount(Iterable, String[]) com.feilong.core.util.AggregateUtil.groupCount(Iterable, String[], Predicate) 循环 beanIterable,只选择符合 includePredicate 的对象,统计 propertyName的值出现的次数. 说明: 返回的LinkedHashMap,key是propertyName名字,子map的key是propertyName对应的值,value是该值出现的次数; 顺序是 beanIterable propertyName的值的顺序 示例: 场景: 统计user list,属性名字是name 的值的数量 以及age值的数量 List<User> list = toList(// new User("张飞", 20), new User("关羽", 30), new User("赵云", 50), new User("刘备", 40), new User("刘备", 30), new User("赵云", 50)); Map<String, Map<Object, Integer>> map = AggregateUtil.groupCount(list, toArray("name", "age")); LOGGER.debug(JsonUtil.format(map)); 返回: { "age": { "20": 1, "30": 2, "50": 2, "40": 1 }, "name": { "张飞": 1, "关羽": 1, "赵云": 2, "刘备": 2 } } #667 BeanPredicateUtil 新增 Predicate<T> equalPredicate(T bean,String...propertyNames) 构造属性与一个指定对象 bean 的一组属性的值 propertyNames 都相等的判断器. 说明: 常用于解析集合,如 select,find, selectRejected, group, groupCount, sum 等方法. 示例: 场景: 在list中查找 名字是 关羽,并且 年龄是30 的user User guanyu30 = new User("关羽", 30); List<User> list = toList(// new User("张飞", 23), new User("关羽", 24), new User("刘备", 25), guanyu30); Predicate<User> predicate = PredicateUtils .andPredicate(BeanPredicateUtil.equalPredicate("name", "关羽"), BeanPredicateUtil.equalPredicate("age", 30)); assertEquals(guanyu30, CollectionsUtil.find(list, predicate)); 此时你可以优化成: User guanyu30 = new User("关羽", 30); List<User> list = toList(// new User("张飞", 23), new User("关羽", 24), new User("刘备", 25), guanyu30); assertEquals(guanyu30, find(list, BeanPredicateUtil.equalPredicate(guanyu30, "name", "age"))); #628 NumberUtil 添加 BigDecimal getSubtractValue(Number beSubtractedValue,Number...subtractions) 计算减法的方法 说明: 示例: NumberUtil.getSubtractValue(0, 2, 3) = -5 NumberUtil.getSubtractValue(0,null) = 0 NumberUtil.getSubtractValue(0, new Integer[5]) = 0 NumberUtil.getSubtractValue(2, 1.1) = 0.9 NumberUtil.getSubtractValue(1000, 99.5, 99.0) = 801.5 NumberUtil.getSubtractValue(1000, 50, null) = 950 NumberUtil.getSubtractValue(-1000, -50, 100) = -1050 NumberUtil.getSubtractValue(null, 5) // NullPointerException #686 添加 DateUtil.isToday(Date),判断指定的日期 是否是 今天的 方法 判断指定的日期 date,是不是今天的日期. 示例: DateUtil.isToday(new Date()) = true // 如果今天 是2017年12月14日 DateUtil.isToday(toDate("2016-06-16 22:59:00", COMMON_DATE_AND_TIME)) = false #683 添加 DateExtensionUtil.getTodayStartAndEndPair() 新建获得 今天 开始和结束的时间的方法 获得 今天的开始时间 00:00:00.000 及今天的结束时间 23:59:59.999. 一般用于统计当天数据,between ... and ... 示例: 比如今天的是 2012-10-16 22:18:34 返回: 2012-10-16 00:00:00.000, 2012-10-16 23:59:59.999 #684 添加 DateExtensionUtil.getYesterdayStartAndEndPair() 新建获得 昨天 开始和结束的时间的方法 #677 添加 DateExtensionUtil.getMonthStartAndEndPair() 新建获得当前月区间的方法 #678 添加 DateExtensionUtil.getYearStartAndEndPair() 新建获得当前年区间的方法(第一天0点 到最后一天23:59:59) [Update] #687 DateUtil isEquals(Date date1,Date date2,String datePattern),如果 date1 == date2 直接返回true #669 RegexPattern 移动到 feilong-validator 项目 #621 RegexPattern 配置是否可以提到配置文件,便于商城定制 #663 更新手机号码正则表达式 #665 RegexUtil 加上缓存 [Remove] #682 删除 DateExtensionUtil.getResetTodayAndTomorrow() getResetYesterdayAndToday 方法 #592 删除 @deprecated com.feilong.core.RegexPattern.EMAIL #676 删除没有用的 feilong-core-regex.properties [Fix Bug] none [javadoc] none [test] #672 MessageFormatUtilTest.testFormat() 单元测试报错 bug [help wanted] #670 ThreadUtil 添加 javadoc 关于 callable Javadoc [log] none feilong-core 1.10.6,让 Java 开发更简便的工具包下载地址