前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >都2020年了,你还不会写简洁的Java代码!

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

原创
作者头像
拾荒者的笔记
修改2020-06-15 10:50:14
5520
修改2020-06-15 10:50:14
举报
文章被收录于专栏:Spring专栏Spring专栏

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

使用Google Guava依赖

代码语言:txt
复制
<dependency>

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

    <artifactId>guava</artifactId>

    <version>29.0-jre</version>

</dependency>

创建一个list集合并赋值

最原始的办法:

代码语言:txt
复制
List<String> stringList = new ArrayList<>();

stringList.add("jack");

stringList.add("pony");

stringList.add("ekko");

简单改造:

代码语言:txt
复制
List<String> stringList2 = new ArrayList<String>(4) {{

    add("jack");

    add("pony");

    add("ekko");

}};

终极改造:

代码语言:txt
复制
List<String> stringList3 = ImmutableList.of("jack", "pony", "ekko");

去除list中的空值

一般做法:

代码语言:txt
复制
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简化后的写法:

代码语言:txt
复制
List<String> noNullListFun = nameList

        .stream()

        .filter(Objects::nonNull)

        .collect(Collectors.toList());

list中的值求和

原始做法:

代码语言:txt
复制
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);

简化一下:

代码语言:txt
复制
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());

判断值是否为空

原始写法:

代码语言:txt
复制
public static String getUserName() {

    return null;

}

// 模拟调用服务

String username = getUserName();

String res;

if (username != null) {

    res = username;

} else {

    res = "游客";

}

简化:

代码语言:txt
复制
String userName = Optional.ofNullable(username).orElse("游客");

System.out.println(userName);

从多个集合中取匹配的值

原始方法:

代码语言:txt
复制
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());

    }

}

改造后的代码:

代码语言:txt
复制
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一样的代码,接盘的人一定会问候你的亲人,何必呢

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 都2020年了,你还不会写简洁的Java代码!
    • 使用Google Guava依赖
      • 创建一个list集合并赋值
        • 去除list中的空值
          • list中的值求和
            • 判断值是否为空
              • 从多个集合中取匹配的值
                • 总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档