吐槽
我是一个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
业务代码计算交集、并集、差集也是常有的,类似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);
输出
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也会提示过期方法
业务代码中经常处理大集合数据,需要拆分来处理
拆分思路非常重要
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
业务代码中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