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

  • 相关阅读:
    LSMW TIPS
    Schedule agreement and Delfor
    Running VL10 in the background 13 Oct
    analyse idoc by creation date
    New Journey Prepare
    EDI error
    CBSN NEWS
    Listen and Write 18th Feb 2019
    Microsoft iSCSI Software Target 快照管理
    通过 Microsoft iSCSI Software Target 提供存储服务
  • 原文地址:https://www.cnblogs.com/cvandy/p/13122468.html
Copyright © 2011-2022 走看看