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企服之家,中国第一个企服评测及商务社交产业平台。 |