美文网首页Java 精选
都2020年了,你还不会写简洁的Java代码!

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

作者: Java_Pro | 来源:发表于2020-06-14 00:20 被阅读0次

    都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一样的代码,接盘的人一定会问候你的亲人,何必呢
    二是要利用一切可以利用的工具类,不过用的时候看看别人的源码,写的时候考虑的周全与否,这样基本你的代码显性来看会少很多
    总之,功能一点点实现,大道至简,用最简单的代码实现最强的逻辑~

    相关文章

      网友评论

        本文标题:都2020年了,你还不会写简洁的Java代码!

        本文链接:https://www.haomeiwen.com/subject/zzptxktx.html