java常用快捷操作方法总汇

正则表达式

String base64Header = "data:image/jpeg;base64,11111111111111111111111111111111";
Pattern pattern = Pattern.compile("data:image/.*?;base64,");
Matcher matcher = pattern.matcher(base64Header);
if (matcher.find()) {
    System.out.println(matcher.group(0));
}
String fileName = matcher.replaceAll("");
System.out.println(fileName);

mybatisplu获取对象的表名和字段名

String tableName = SqlHelper.table(Class<?> clazz).getTableName();
List<TableFieldInfo> fieldInfoList = SqlHelper.table(Class<?> clazz).getFieldList();
// 字段名
String column = TableFieldInfo.getColumn();
// 对象属性
String name = TableFieldInfo.getField().getName();

map中key排序

// 升序排序
List<Map.Entry<String, List<DataStorageInfo>>> entryList = batchNumberMap.entrySet().stream()
        .sorted(Map.Entry.comparingByKey()).collect(Collectors.toList());
// 降序排序
List<Map.Entry<String, List<DataStorageInfo>>> entryList = batchNumberMap.entrySet().stream()
        .sorted(Collections.reverseOrder(Map.Entry.comparingByKey())).collect(Collectors.toList());

mysql自动填充创建时间和修改时间

create table test(
  id integer not null auto_increment primary key,
  name varchar(20) not null ,
  create_time timestamp not null default CURRENT_TIMESTAMP COMMENT '创建时间',
  update_time timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间');

ALTER TABLE test MODIFY create_time timestamp not null default CURRENT_TIMESTAMP COMMENT '创建时间';
ALTER TABLE test MODIFY update_time timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间';
 
ALTER TABLE test ADD create_time timestamp not null default CURRENT_TIMESTAMP COMMENT '创建时间';
ALTER TABLE test ADD update_time timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP COMMENT '更新时间';

深度复制

Cell clone = SerializationUtils.clone(cell);

sql

wm_concat: Oracle自带的wm_concat()函数将字符串合并
LISTAGG:  
LISTAGG (e.emp_name, ',') WITHIN GROUP (ORDER BY e.emp_name) names
LISTAGG()函数将字符串合并,它的优点在于,合并的连接符号可以指定为任意字符,并且可以很方便实现ORDER BY排序

1.数组转换成字符串

int[] arr = {1,2,3,4};
String str= Arrays.stream(arr).boxed().map(Object::toString).collect(Collectors.joining(","));

2.集合转换成字符串

Integer[] arr = {1,2,3,4};
List<Integer> list = Arrays.asList(arr);
String str = list.stream().map(Object::toString).collect(Collectors.joining(","));
String join = String.join(",", list);

将两个字符数组合并成一个新的字符数组。

List<String> list = Arrays.asList("m,k,l,a", "1,3,5,7");
    List<String> listNew = list.stream().flatMap(s -> {
      // 将每个元素转换成一个stream
      String[] split = s.split(",");
      Stream<String> s2 = Arrays.stream(split);
      return s2;
    }).collect(Collectors.toList());

统计员工人数、平均工资、工资总额、最高工资

// 求总数
    Long count = personList.stream().collect(Collectors.counting());
    // 求平均工资
    Double average = personList.stream().collect(Collectors.averagingDouble(Person::getSalary));
    // 求最高工资
    Optional<Integer> max = personList.stream().map(Person::getSalary).collect(Collectors.maxBy(Integer::compare));
    // 求工资之和
    Integer sum = personList.stream().collect(Collectors.summingInt(Person::getSalary));
    // 一次性统计所有信息
    DoubleSummaryStatistics collect = personList.stream().collect(Collectors.summarizingDouble(Person::getSalary));

3.集合交集、并集、补集、差集

//并集
Collection<String> union = CollectionUtils.union(listA, listB);
System.out.println("并集:"+union);
//交集
Collection<String> intersection = CollectionUtils.intersection(listA, listB);
System.out.println("交集:"+intersection);
//交集的补集
Collection<String> disjunction = CollectionUtils.disjunction(listA, listB);
System.out.println("交集的补集   :"+disjunction);
//差集(集合相减)
Collection<String> subtract = CollectionUtils.subtract(listA, listB);
System.out.println("差集(集合相减)   :"+subtract);

4.list集合分组

// 去掉重复
list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> 
                    new TreeSet<>(Comparator.comparing(obj::getId))), ArrayList::new))
// 多字段分组
Map<String, List<T>> workflowMapList = t.stream().collect(Collectors.groupingBy(w -> w.getField1().concat(w.getField2())));
// 单子段分组
Map<String, List<T>> workflowMapList = t.stream().collect(Collectors.groupingBy(T::getField1));
// 取其中的某个字段
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getType));
// 转换类型
Map<Long, String> map = basCodeDict.stream().collect(Collectors.toMap(o  -> Long.valueOf(o.getValue().toString()), OptionsVo::getText));
Map<String, List<Long>> map = list.stream()
                    .collect(Collectors.groupingBy(Object::getId, Collectors.mapping(Object::getId, Collectors.toList())));


/**
 * List<T> -> Map<Object,T>
 * 需要注意的是:
 * toMap 如果集合对象有重复的key,会报错Duplicate key ....
 * apple1,apple12的id都为1。
 * 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
 */
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
## List<Integer>
Map<Integer, Integer> collect = list.stream().collect(Collectors.toMap(i-> i,Function.identity()))

将list对象中字符拼接字段合并成一个集合
List<String> list = stocks.stream().map(s -> Lists.newArrayList(Arrays.asList(s.getPath().split(","))))
                .flatMap(Collection::stream).distinct().collect(Collectors.toList());

字符串转换成集合
List<String> list = Arrays.stream(value.toString().split(",")).distinct().collect(Collectors.toList());

5.排序

// 默认字符排序
Collections.sort(listStr);
// 对象单个排序
itemList.sort(Comparator.comparing(item::getA));
// 多字段排序:a b 都是对象的属性
itemList.sort(Comparator.comparing(item::getA).thenComparing(item::getB));

//返回 对象集合以类属性一降序排序 注意两种写法
list.stream().sorted(Comparator.comparing(类::属性一).reversed());//先以属性一升序,结果进行属性一降序
list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));//以属性一降序
// map排序
detailList.sort(Comparator.comparing(item -> item.get(groupField).toString()));

1.  顺序排序 Collections.sort(list);
2.  混乱排序 Collections.shuffle(list);
3.  倒序排序 Collections.reverse(list);

6.字符串操作

// 首字母转成大写
String capitalize = StringUtils.capitalize(str);
// 重复拼接字符串
String str = StringUtils.repeat("ab", 2);

7.commons-beanutils工具方法

// 设置/获取 对象属性
BeanUtils.setProperty(user, "id", 1);
BeanUtils.setProperty(user, "name", "yideng");
System.out.println(BeanUtils.getProperty(user, "name")); // 输出 yideng

// 对象和map转化
Map<String, String> map = BeanUtils.describe(user);
// map转对象
BeanUtils.populate(newUser, map);

8.guava 提供的工具方法

// 反转list
List<Integer> reverse = Lists.reverse(list);
// list集合元素太多,可以分成若干个集合,每个集合10个元素
List<List<Integer>> partition = Lists.partition(list, 10);

9.特殊集合

1 Multimap 一个key可以映射多个value的HashMap
2 BiMap 一种连value也不能重复的HashMap
3 Table 一种有两个key的HashMap
4 Multiset 一种用来计数的Set

10.其他备注

AsyncContext asyncContext = request.startAsync();
asyncContext.start(new Runnable() {});
//异步请求完成通知
//此时整个请求才完成
//其实可以利用此特性 进行多条消息的推送 把连接挂起。。
asyncContext.complete();

11.注解

分布式锁,保证分布式中指只执行一次,EnableSchedulerLock
@EnableSchedulerLock(defaultLockAtMostFor = "PT480S")

12.redis配置主从读写分离

@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){
    return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}
//配置 redisTemplate 优先从 slave 节点读取数据,如果 slave 都宕机了,则抛出异常
        //return clientConfigurationBuilder -> clientConfigurationBuilder.readFrom(ReadFrom.REPLICA);
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容