小小小幸运 发表于 2024-11-11 18:43:32

技术日记2023-5-15

1、list直接remove不存在的值不会报错

public static void test1() {
    List<String> list = new ArrayList<>();
    list.add("1");
    list.add("2");

    // 删除不存在的元素,返回false
    System.out.println(list.remove("3"));
    // 删除存在的元素,返回true
    System.out.println(list.remove("1"));
}
这里有一个有趣的bug:

   使用 Arrays.asList(“1”,“2”); 创建的list使用 remove和add 方法会报错 java.lang.UnsupportedOperationException
代码块:
public static void test2() {
    List<String> list = Arrays.asList("1", "2", "3");
    System.out.println(list.remove("3"));
    System.out.println(list.remove("1"));
    list.add("3");
    System.out.println(list);
}
执行结果:
Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.AbstractList.remove(AbstractList.java:161)
        at java.util.AbstractList$Itr.remove(AbstractList.java:374)
        at java.util.AbstractCollection.remove(AbstractCollection.java:293)
        at com.wqguo.list.Demo.test2(Demo.java:34)
        at com.wqguo.list.Demo.main(Demo.java:13)
缘故原由如下:
调用Arrays.asList()产生的List中的add、remove方法报非常,是因为Arrays.asList()返回的List实现类是自己内部实现的ArrayList,不是我们常用的java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继续AbstractList,但是在Arrays的内部类ArrayList中没有重写AbstractList的add和remove方法。
AbstractList中add和remove方法都是默认throw UnsupportedOperationException的。
2、增强for循环如果list为null会报java.lang.NullPointerException

public static void main(String[] args) {
    List<String> list = null;
    for (String s : list) {
      System.out.println("jksdlf");
    }

    // 可以使用这种代码替换
    Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(s->{
      System.out.println("jlskjdlfk");
    });
}
3、判断多个String范例参数恣意为空时可以使用StringUtils.isAnyBlank()方法

public static void main(String[] args) {
    String mobile = "";
    String name = "jslkdf";
    System.out.println(StringUtils.isAnyBlank(mobile, name));
}
4、使用Optional来办理list为空产生NullPointerException

使用optional就可以不用判断list是否为空
Optional.ofNullable(list).orElse(new ArrayList<>()).stream().collect(Collectors.toList());
5、使用MessageFormat来格式化字符串的输出

public static String test1() {
    String USER_APP_SMS_CAPTCHA_KEY = "app:captcha:{0}:{1}";

    String mobile = "11111111";
    Integer type = 1;


    String format = MessageFormat.format(USER_APP_SMS_CAPTCHA_KEY, mobile, type);
    return format;
}
6、在工作中开辟尽量在测试前将代码优化好

否则前期没有优化代码,末了自己都不敢去改了,本来没有bug的代码容易改出代码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 技术日记2023-5-15