网络知识 娱乐 程序员加班多原因之一重复造轮子,推荐学习谷歌利器Guava

程序员加班多原因之一重复造轮子,推荐学习谷歌利器Guava

吐槽

我是一个java码农

关于程序员996话题

我也分析一波

公司工作量太大(我们无法控制)

程序员天天重复造轮子(指天天写些重复垃圾代码,这个可以控制)

推荐谷歌Guava工具包,这工具包老厉害了

大谷歌就是牛

代码举例

//字符拼接、拆分
List<String> names=new ArrayList<>();
names.add("程序汪");
names.add("码农");
names.add("工程师");
names.add(null);
names.add("");

字符拼接

可以帮过滤null字符或字符啊,非常贴心

String namesStr=Joiner
.on(",")
.skipNulls()
.join(names);
System.out.println("字符拼接工具之guava:"+namesStr);
输出:程序汪,码农,工程师,

拆分成集合

List<String> ns=Splitter
.on(",")
.omitEmptyStrings()
.splitToList(namesStr);
System.out.println("======拆分结果=====");
ns.forEach(System.out::println);

输出:

  • 程序汪
  • 码农
  • 工程师

1

set集合求交集, 并集, 差集

业务代码计算交集、并集、差集也是常有的,类似mysql的内连接、左连接

注意差集是返回左集合独有数据

交集很好理解

HashSet<Integer> setF = Sets.newHashSet(1, 2, 3);
HashSet<Integer> setT = Sets.newHashSet(3, 4, 5);

并集

Sets.SetView<Integer> union = Sets.union(setF, setT);
//差集:返回只存在于setF左集独有的数据, 结果【1,2】
Sets.SetView<Integer> difference = Sets.difference(setF, setT);
//交集
Sets.SetView<Integer> intersection = Sets.intersection(setF, setT);
输出:
System.out.println("并集:");
for (Integer integer : union) {
System.out.println(integer);
}
System.out.println("差集:");
for (Integer integer : difference) {
System.out.println(integer);
}
System.out.println("交集:");
for (Integer integer : intersection) {
System.out.println(integer);
}

1

异常工具

异常处理对项目非常重要,异常码够细 提示够精准

建议业务代码可以自定义自己的Preconditions

通过自定义异常+异常码来定制Preconditions

double money = -1;
Preconditions.checkArgument(money > 0,
"必须大于0元: %s", money);

输出

Multimap

map1对1,但1对多场景需要写成Map<String,List<String>>

MultiMap就可以方便替换Map<String,List<String>>

Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("程序汪","小丽");
multimap.put("程序汪","静静");

输出

for(String name:multimap.get("程序汪")){
System.out.println(name);
}

不可变集合,安全定义

业务代码中经常需要定义写初始数据

但又不想其他人去乱改

ImmutableList<String> statusList=new ImmutableList.Builder<String>()
.add("INIT")
.add("ONLINE")
.add("OFFLINE").build();

如果中间有人误操作先去改集合数据

statusList.add("CLOSE");
statusList.forEach(System.out::println);

直接会异常,idea也会提示过期方法

集合拆分Lists.partition

业务代码中经常处理大集合数据,需要拆分来处理

拆分思路非常重要

List<String> list= Lists.newArrayList();
for(int i=0;i<501;i++){
list.add(""+i);
}
1
Lists.partition(list,100).forEach(lists-> {
//业务代码,处理小集合
});

输出:100为单位拆分大集合

性能耗时

Stopwatch stopWatch=Stopwatch.createStarted();
//TODO 业务代码
System.out.println("ms:"+stopWatch.elapsed(TimeUnit.MILLISECONDS));
1

map比较

业务代码中2个map集合的比较操作,强大的谷歌工具

Map<String,String> map=Maps.newHashMap();
map.put("1","上海");
map.put("2","北京");
map.put("3","中国香港");
Map<String,String> map1=Maps.newHashMap();
map1.put("1","上海");
map1.put("2","北京");
map1.put("4","深圳");
1
MapDifference<String,String> mapd= Maps.difference(leftMap,rightMap);
//只存在左集合
mapd.entriesOnlyOnLeft().entrySet().forEach(entry ->
System.out.println("entriesOnlyOnLeft "+entry.getKey()+":"+entry.getValue()));
//只存在右集
mapd.entriesOnlyOnRight().entrySet().forEach(entry ->
System.out.println("entriesOnlyOnRight "+entry.getKey()+":"+entry.getValue()));
//交集
mapd.entriesInCommon().entrySet().forEach(entry ->
System.out.println("entriesInCommon "+entry.getKey()+":"+entry.getValue()));

输出

  • 只存在左集合
  • 只存在右集合
  • 交集

作者:筑梦编程 来源:https://mp.weixin.qq.com/s/MN5izdBSYaDUtn6P53ostA