专栏首页Spring专栏都2020年了,你还不会写简洁的Java代码!
原创

都2020年了,你还不会写简洁的Java代码!

都2020年了,你还不会写简洁的Java代码!

使用Google Guava依赖

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>29.0-jre</version>

</dependency>

创建一个list集合并赋值

最原始的办法:

List<String> stringList = new ArrayList<>();

stringList.add("jack");

stringList.add("pony");

stringList.add("ekko");

简单改造:

List<String> stringList2 = new ArrayList<String>(4) {{

    add("jack");

    add("pony");

    add("ekko");

}};

终极改造:

List<String> stringList3 = ImmutableList.of("jack", "pony", "ekko");

去除list中的空值

一般做法:

List<String> nameList = new ArrayList<>();

List<String> 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);

    }

}

使用lamda简化后的写法:

List<String> noNullListFun = nameList

        .stream()

        .filter(Objects::nonNull)

        .collect(Collectors.toList());

list中的值求和

原始做法:

List<BigDecimal> numList = new ArrayList<BigDecimal>(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);

简化一下:

List<BigDecimal> 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());

判断值是否为空

原始写法:

public static String getUserName() {

    return null;

}

// 模拟调用服务

String username = getUserName();

String res;

if (username != null) {

    res = username;

} else {

    res = "游客";

}

简化:

String userName = Optional.ofNullable(username).orElse("游客");

System.out.println(userName);

从多个集合中取匹配的值

原始方法:

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<String> nameListA = ImmutableList.of("素云云", "马云云", "腾花花", "阿娇娇", "马飞飞", "廖妹妹");

        List<String> nameListB = ImmutableList.of("素云涛", "唐三三", "小五五", "马中山", "马僻静", "马肥羊");

        List<String> nameListC = ImmutableList.of("张三", "李四", "王二", "麻子", "上官玩儿", "马可菠萝");

        Set<String> 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());

    }

}

改造后的代码:

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<String> nameListA = ImmutableList.of("素云云", "马云云", "腾花花", "阿娇娇", "马飞飞", "廖妹妹");

        List<String> nameListB = ImmutableList.of("素云涛", "唐三三", "小五五", "马中山", "马僻静", "马肥羊");

        List<String> nameListC = ImmutableList.of("张三", "李四", "王二", "麻子", "上官玩儿", "马可菠萝");

        Set<String> nameSet = Stream.of(nameListA, nameListB, nameListC)

                .flatMap(list -> list.stream().filter(name -> name.startsWith("马")))

                .collect(Collectors.toSet());

        System.out.println(nameSet.toString());

    }

}

总结

Java之道,写的代码第一点是要别人能看的明白,不然你离职了留下一堆像shi一样的代码,接盘的人一定会问候你的亲人,何必呢

二是要利用一切可以利用的工具类,不过用的时候看看别人的源码,写的时候考虑的周全与否,这样基本你的代码显性来看会少很多

总之,功能一点点实现,大道至简,用最简单的代码实现最强的逻辑~

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot2.x与MongoDB集成(十)

    介绍MongoDB与Spring Boo集成,并通过MongoRepository以及MongoTemplate来执行CRUD操作。

    拾荒者的笔记
  • SpringCloud 初始化父子项目并集成 Consul 服务发现

    生成之后解压,先用IDE编辑文件修改pom.xml,如下图,在底部 </build> 标签下切换国内阿里源

    拾荒者的笔记
  • 最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版本也都面向商业收费了,很多新手,我...

    拾荒者的笔记
  • 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成

    之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择—...

    蒋金楠
  • Kotlin入门(15)独门秘笈之特殊类

    上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类。除了与Ja...

    用户4464237
  • 如何在一个python程序中运行另外一个程序

    将另外一个python程序封装成一个我们想要运行的模块,在模块里面,将所有代码放到一个函数里面,在另外一个程序中导入运行就可以了。

    用户7054460
  • 用 MelonJS 开发一个游戏[每日前端夜话0xD9]

    游戏开发并不需要局限于使用 Unity 或 Unreal Engine4 的用户。JavaScript 游戏开发已经有一段时间了。实际上,最流行的浏览器(例如C...

    疯狂的技术宅
  • Oracle 12c DBCA浅析(r12笔记第48天)

    我们知道在11g的环境中我们可以通过一些分析来得到DBCA的一些后台处理工作,有一点需要说明的是,如果一个12c的单实例数据库需要转换为12c的容器数据库...

    jeanron100
  • ImportError: No module named 'BaseHTTPServer':解决方案

    Tencent JCoder
  • Android仿直播特效之点赞飘心效果

    本文实例为大家分享了Android实现点赞飘心效果的具体代码,供大家参考,具体内容如下

    砸漏

扫码关注云+社区

领取腾讯云代金券