1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

安利一个java开发利器——guava

前言

工欲善其事必先利其器,一个好的工具让你花更少的时间,干更多的活,一定程度上比较高效地解放了你的的生产力,让你可以有更多的时间搞事情(摸鱼、划水呀),作为java后端开发人员,guava对我们而言,就是这样的工具,今天我们就来了解下这把利器。

guava

guava是什么

GuavaGoogle提供的一组核心Java库,包括新的集合类型(如multimapmultiset)、不可变集合、图形库以及用于并发、I/O、哈希、缓存、原语、字符串等的实用程序!它广泛应用于Google内部的大多数Java项目,也被许多其他公司广泛使用。

guava的应用

既然是工具,那我们关注的就是它的用法,接下来我们就分别从集合、图形、I/O、哈希、缓存、原语、字符串等方面,分享一些guava的常见应用,让他真正能够解放你的生产力,今天主要介绍collect包下的内容,其他内容,感兴趣的小伙伴自己去研究。

首先在我们的项目中,添加guava的依赖:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1.1-jre</version>
    <!-- or, for Android: -->
    <!--<version>30.1.1-android</version>-->
</dependency>

如果是android,换下依赖的版本即可。

集合(Lists)

包路径:com.google.common.collect.Lists

创建和添加对象

正常情况下,我们在java中创建和使用List的时候,基本都是这样的:

// 创建集合
List<String> stringList1 = new ArrayList<>();
// 添加对象
stringList1.add("hello");
stringList1.add("world");

但是,如果你用了guava,那上面这些你都可以一步到位:

List<String> stringList2 = Lists.newArrayList("hello", "world");

还支持直接传入数组:

String[] strings = new String[] {"1231", "23432423"};
ArrayList<String> strings1 = Lists.newArrayList(strings);

list分割

更强大的是,它还支持List分割,我们在日常开发中经常有这样的需求,比如某个接口或方法限制了List数据量大小(比如list的大小不能超过200),这时候你如果自己手动写一个分割工具类就很麻烦,但如果用guava,那就很简单:

List<List<String>> partition = Lists.partition(stringList1, 200);

上面代码的作用就是把我们的stringList1分割成200一份的小list,这时候你再配合上forEach,需求就完美实现了。

让你的开发过程更简单,更便捷,其他List的子类创建类似。

list反转

实际开发中,经常要将list反转,比如1, 2, 3, 4list反转成4, 3, 2, 1,自己写的话,需要写个for循环,然后反向输出到另一个List,但是用guava就贼简单:

List<Integer> integerList = Lists.newArrayList(1, 2, 3, 4);
// 反转list
List<Integer> reverse = Lists.reverse(integerList);

list转换

比如我要将一个List<String>根据一定的条件转换成一个List<Boolean>,我可以这样操作:

List<String> stringList2 = Lists.newArrayList("hello", "world", "");
List<Boolean> transform = Lists.transform(stringList2, s -> !"".equals(s));

我转换的条件是只有不是空字符串就是true,这里s -> !"".equals(s)lamubda表达式的写法(最近一直在提这个,这个现在确实已经是主流了),展开写确实占行数:

List<Boolean> transform2 = Lists.transform(stringList2, 
     new Function<String, Boolean>() {
            @Override
            public @Nullable Boolean apply(@Nullable String input) {
                return !"".equals(input);
            }
        });

其他更多方法,大家自己下载研究,上面这些已经很可以了,满足日常大部分需求,接下来,我们再来看下Maps

Maps

List类似,Maps这个类也提供了很多map相关的方法,下面我们就来看一下。

创建map

HashMap<Object, Object> objectObjectHashMap = Maps.newHashMap();
        HashMap<Object, Object> objectObjectHashMap1 = Maps.newHashMap(objectObjectHashMap);

比较两个map

这个方法就很强大,不仅可以返回两个map的交集,还能返回每个map不同的地方,结果都是map

HashMap<Object, Object> objectObjectHashMap = Maps.newHashMap();
        objectObjectHashMap.put("k1", "v1");
        objectObjectHashMap.put("k2", "v2");
        objectObjectHashMap.put("k3", "v3");

        HashMap<Object, Object> objectObjectHashMap1 = Maps.newHashMap(objectObjectHashMap);
        objectObjectHashMap.put("k4", "v4");
        objectObjectHashMap1.put("k5", "v5");
// 比较两个map
        MapDifference<Object, Object> difference = Maps.difference(objectObjectHashMap, objectObjectHashMap1);
// 返回交集
        Map<Object, Object> objectObjectMapCommon = difference.entriesInCommon();
// 返回左侧map特有的
        Map<Object, Object> objectObjectMap1Left = difference.entriesOnlyOnLeft();
// 返回右侧map特有的
        Map<Object, Object> objectObjectMap2Right = difference.entriesOnlyOnRight();
        System.out.println(objectObjectMapCommon);
        System.out.println(objectObjectMap1Left);
        System.out.println(objectObjectMap2Right);

将集合转为Map

这里还提供了将List等集合转为map的方法:

ImmutableMap<String, String> stringStringImmutableMap2 = Maps.toMap(stringList, s -> s);

上面的代码就是将一个list转成keyvalue都一样的map

或者将map转换为新的map:

        ImmutableMap<Map.Entry<String, Object>, Boolean> entryBooleanImmutableMap = Maps.toMap(stringObjectImmutableMap.entrySet(), k -> "123123".equals(k));

总结

今天,我们分享了ListsMaps的很多常用的方法,并演示了常用的方法,还有很多内容没讲到,一方面说明它也不常用(我没用到就是不常用),另外一方面,guava目前我只用到了集合下的一部分功能,所以目前就分享这么多。但是,guava用起来真的很方便,也确实解决了很多开发中的问题,提高了我们的开发效率,至于其他的内容,后期看情况。

最后,我们先安利另外一款比较火的工具包——huTool,提供的方法也很丰富,因为是国人开源的,所以很容易上手,这里我们先简单预告下,后期专门分享,工具包官方开源地址:

https://hutool.cn/

好了,今天就到这里吧!

posted @ 2023-12-12 17:54  云中志  阅读(59)  评论(0编辑  收藏  举报