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

程序员、计算机软件、java语言、后端开发、码农

吐槽

我是一个java码农

最近关于程序员996话题非常火热

我也分析一波

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

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

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

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

大谷歌就是牛

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

代码举例

//字符拼接、拆分

List 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 ns=Splitter

.on(",")

.omitEmptyStrings()

.splitToList(namesStr);

System.out.println("======拆分结果=====");

ns.forEach(System.out::println);

输出:

  • 程序汪
  • 码农
  • 工程师

1

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

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

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

交集很好理解

HashSet setF = Sets.newHashSet(1, 2, 3);

HashSet setT = Sets.newHashSet(3, 4, 5);

并集

Sets.SetView union = Sets.union(setF, setT);

//差集:返回只存在于setF左集独有的数据, 结果【1,2】

Sets.SetView difference = Sets.difference(setF, setT);

//交集

Sets.SetView 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);

}

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

1

异常工具

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

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

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

double money = -1;

Preconditions.checkArgument(money > 0,

"必须大于0元: %s", money);

输出

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

Multimap

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

MultiMap就可以方便替换Map>

Multimap multimap = ArrayListMultimap.create();

multimap.put("程序汪","小丽");

multimap.put("程序汪","静静");

输出

for(String name:multimap.get("程序汪")){

System.out.println(name);

}

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

不可变集合,安全定义

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

但又不想其他人去乱改

ImmutableList statusList=new ImmutableList.Builder()

.add("INIT")

.add("ONLINE")

.add("OFFLINE").build();

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

statusList.add("CLOSE");

statusList.forEach(System.out::println);

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

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

集合拆分Lists.partition

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

拆分思路非常重要

List list= Lists.newArrayList();

for(int i=0;i<501;i++){

list.add(""+i);

}

1

Lists.partition(list,100).forEach(lists-> {

//业务代码,处理小集合

});

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

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

性能耗时

Stopwatch stopWatch=Stopwatch.createStarted();

//TODO 业务代码

System.out.println("ms:"+stopWatch.elapsed(TimeUnit.MILLISECONDS));

1

map比较

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

Map map=Maps.newHashMap();

map.put("1","上海");

map.put("2","北京");

map.put("3","香港");

Map map1=Maps.newHashMap();

map1.put("1","上海");

map1.put("2","北京");

map1.put("4","深圳");

1

MapDifference 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()));

输出

  • 只存在左集合
  • 只存在右集合
  • 交集
程序员加班多原因之一重复造轮子  推荐学习谷歌利器Guava

1

历史文章


分享到:


相關文章: