使用Google Guava依赖

com.google.guava
guava
29.0-jre

1
2
3
4
5
创建一个list集合并赋值
最原始的办法:

List stringList = new ArrayList<>();
stringList.add(“jack”);
stringList.add(“pony”);
stringList.add(“ekko”);
1
2
3
4
简单改造:

List stringList2 = new ArrayList(4) {{
add(“jack”);
add(“pony”);
add(“ekko”);
}};
1
2
3
4
5
终极改造:

List stringList3 = ImmutableList.of(“jack”, “pony”, “ekko”);
1
去除list中的空值
一般做法:

List nameList = new ArrayList<>();
List noNullList = new ArrayList<>();
nameList.add(“jack”);
nameList.add(“pony”);
nameList.add(“ekko”);
nameList.add(null);
for (String o : stringList) {
if (o != null) {
noNullList.add(o);
}
}
1
2
3
4
5
6
7
8
9
10
11
使用lamda简化后的写法:

List noNullListFun = nameList
.stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
1
2
3
4
list中的值求和
原始做法:

List numList = new ArrayList(10) {{
add(BigDecimal.valueOf(111L));
add(BigDecimal.valueOf(8888.22));
add(BigDecimal.valueOf(333.22));
add(BigDecimal.valueOf(857857.22));
add(BigDecimal.valueOf(5331.22));
}};
BigDecimal total = BigDecimal.ZERO;
for (BigDecimal num : numList) {
total = total.add(num);
}
System.out.println(total);
1
2
3
4
5
6
7
8
9
10
11
12
简化一下:

List numListSimple = ImmutableList.of(BigDecimal.valueOf(111L)
, BigDecimal.valueOf(8888.22), BigDecimal.valueOf(333.22)
, BigDecimal.valueOf(857857.22), BigDecimal.valueOf(5331.22));
// 求和
BigDecimal totalNum = BigDecimal.valueOf(numListSimple.stream().mapToDouble(BigDecimal::doubleValue).sum());
1
2
3
4
5
判断值是否为空
原始写法:

public static String getUserName() {
return null;
}
// 模拟调用服务
String username = getUserName();
String res;
if (username != null) {
res = username;
} else {
res = “游客”;
}
1
2
3
4
5
6
7
8
9
10
11
简化:

String userName = Optional.ofNullable(username).orElse(“游客”);
System.out.println(userName);
1
2
从多个集合中取匹配的值
原始方法:

package com.github.springtools.test;

import com.google.common.collect.ImmutableList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class TestFlatMap {
public static void main(String[] args) {
/*
* 匹配到姓马的并去重然后放入一个新的集合中
*/
List nameListA = ImmutableList.of(“素云云”, “马云云”, “腾花花”, “阿娇娇”, “马飞飞”, “廖妹妹”);
List nameListB = ImmutableList.of(“素云涛”, “唐三三”, “小五五”, “马中山”, “马僻静”, “马肥羊”);
List nameListC = ImmutableList.of(“张三”, “李四”, “王二”, “麻子”, “上官玩儿”, “马可菠萝”);
Set nameSet = new HashSet<>();
nameListA.forEach(n -> {
if (n.startsWith(“马”)) {
nameSet.add(n);
}
});
nameListB.forEach(n -> {
if (n.startsWith(“马”)) {
nameSet.add(n);
}
});
nameListC.forEach(n -> {
if (n.startsWith(“马”)) {
nameSet.add(n);
}
});
System.out.println(nameSet.toString());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
改造后的代码:

import com.google.common.collect.ImmutableList;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TestFlatMap2 {
public static void main(String[] args) {
/*
* 匹配到姓马的并去重然后放入一个新的集合中
*/
List nameListA = ImmutableList.of(“素云云”, “马云云”, “腾花花”, “阿娇娇”, “马飞飞”, “廖妹妹”);
List nameListB = ImmutableList.of(“素云涛”, “唐三三”, “小五五”, “马中山”, “马僻静”, “马肥羊”);
List nameListC = ImmutableList.of(“张三”, “李四”, “王二”, “麻子”, “上官玩儿”, “马可菠萝”);
Set nameSet = Stream.of(nameListA, nameListB, nameListC)
.flatMap(list -> list.stream().filter(name -> name.startsWith(“马”)))
.collect(Collectors.toSet());
System.out.println(nameSet.toString());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
总结
Java之道,写的代码第一点是要别人能看的明白,不然你离职了留下一堆像shi一样的代码,接盘的人一定会问候你的亲人,何必呢
二是要利用一切可以利用的工具类,不过用的时候看看别人的源码,写的时候考虑的周全与否,这样基本你的代码显性来看会少很多
总之,功能一点点实现,大道至简,用最简单的代码实现最强的逻辑~

原文链接:https://blog.csdn.net/Fine_Cui/java/article/details/106737184

都2020年了,你还不会写简洁的Java代码!(转载)相关推荐

  1. 都2020年了,还在迷信啤酒与尿布!数据分析的真相是……

    一提人工智能大数据,必有人提啤酒与尿布,有意思的是,都2020年了,还有人信这个老掉牙的都市传说.今天我们系统讲解一下.  1  站在背后的关联规则 支持啤酒与尿布故事的,是关联规则算法.注意:关联规 ...

  2. cdialog创建后马上隐藏_都2020了,你还没用上这些Windows的“隐藏神技能”?

    如今,电脑系统 的天下都被Windows和macOS给占领了,那么它们之间的较量自然是不少.关于它们谁更好用的话题从来就没断过,也从来没有什么标准答案,只能说是萝卜青菜各有所爱吧.可每次看到那些说Wi ...

  3. 写了这么久Java项目,是否还记得你的第一行Java代码

    前言 个人情况 首先介绍一下本人的情况,我来自于一个双非渣渣二本学院,目前处于大四阶段,由于在小学的时候就开始接触了电脑,一直以来也对IT的各方面有着浓厚的兴趣,所以在高考结束填写志愿书的时候,就毅然 ...

  4. 后端开发需要学什么_都2020年了,还在纠结学什么语言?| 后端篇

    几个礼拜前,一个学弟问我: "Ray,我打算之后要找工作了,不过现在自己没有特别深入的语言,最近想找一门好好学一下,你觉得学什么语言好呀?" 我表示:"这个要看你求职方向 ...

  5. winre drv分区干嘛用的_都2020年了,还在给硬盘分区?看完你就知道有没有必要了...

    电脑硬盘,到底该不该分区? 很多人买了新电脑或者在电脑中安装了SSD硬盘之后,第一个步骤就是:开机-给硬盘分区. 但是,大家有没有考虑过,硬盘是否真的需要分区呢?这不最近有人就在程序员社区V2EX上提 ...

  6. css字体样式代码大全_这都2020年了,还没了解CSS?

    对于新人来说想要了解css,就要从最基本的入手了解,讲真的学习css入门很简单,学习html和css短时间后你就可以制作一个网页,深入的去学习的话,就会很难.他就是从简--深--深--简的一个过程,如 ...

  7. 安卓源代码_都2020年了,还有人以为安卓系统是谷歌的?

    阅读本文前,请您先点击上面的蓝色字体"杨观世界",再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注. 4月8日晚,华为结 ...

  8. 骚年都2020年了你还在用EventBus吗?jetpack之liveData

    在说源码时简单说下liveData使用 //在app的build添加依赖 //使用liveData implementation 'androidx.lifecycle:lifecycle-exten ...

  9. 都2020年了,别再迷信啤酒与尿布!数据分析的真相在这

    一提人工智能大数据,必有人提啤酒与尿布,有意思的是,都2020年了,还有人信这个老掉牙的都市传说.今天我们系统讲解一下. 一.站在背后的关联规则 支持啤酒与尿布故事的,是关联规则算法.注意:关联规则算 ...

最新文章

  1. ngx_lua module 模块安装
  2. antd table设置表格一个单元格的字体颜色_微软Office三件套,各有一个效率神器,全都知道的人不超过1%...
  3. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案
  4. 使用 TABLESAMPLE 限制结果集
  5. numpy教程:统计函数Statistics
  6. eNSP模拟器拓扑图:浮动路由的实际作用和分析,默认路由的配置,抓包分析
  7. 7个开源的SNS社交网络平台
  8. 开源,想说爱你不容易
  9. Apollo添加新的can通信接口的GPS设备
  10. 给站长推荐几本IT书
  11. linux锐捷代码_告诉你Ubuntu Linux锐捷安装方法及命令
  12. 网页设计html图片滚动特效,网站设计|滚动特效全面讲解!
  13. C专家编程 第9章 再论数组 9.6 C语言的多维数组
  14. OSChina 周日乱弹 —— 进入读图时代
  15. 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型
  16. 计算机蓝屏幕亮度,电脑屏幕亮度怎么调,电脑屏幕亮度调节方法
  17. Unity计时器功能
  18. 邮件客户端 web linux,Linux下五个流行的Webmail
  19. 【学习笔记】数理统计习题八
  20. python firefly 游戏引擎 教程(二) 程序入口

热门文章

  1. 1-appium-初识
  2. 前端和后台数据交互总结
  3. 【USACO 2.4.1】两只塔姆沃斯牛
  4. List删除指定数据的几种方法总结
  5. 桌面宠物,3只可爱的小猫
  6. Mysql运算符记忆打字练习
  7. 微信小程序布局,小程序view之flex 布局
  8. After Effects(AE) 基本操作(一)
  9. 整理一些计算机基础知识! 1
  10. Selenium基础篇之屏幕截图方法