Java业务开发常见错误

一、redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用
二、Arrays.asList常见失误需求:把数组转成list集合去处理 。
方法:Arrays.asList 或者 JAVA8的stream流式处理
1)错误一以下代码是否有问题?
int[] arr= {1, 2, 3};List list = Arrays.asList(arr);System.out.println(list);System.out.println(list.size());System.out.println(list.get(0).getClass());日志:
[[I@4232c52b]1class [I为什么打印出来的,不是我们想要的?

Java业务开发常见错误

文章插图
 
可以看到入参是泛型T类型可变参数,把 int数组 整体作为对象成为了T 传入了 。
如何解决?
Integer[] arr2= {1, 2, 3};List list2 = Arrays.asList(arr2);System.out.println(list2);System.out.println(list2.size());System.out.println(list2.get(0).getClass());日志:
[1, 2, 3]3class java.lang.Integer总结:不能直接使用Arrays.asList来转换基本类型数组 。
 2)错误二现在我们已经转成list集合了,我们接下来,进行后续业务操作 。
Integer[] arr2= {1, 2, 3};List list2 = Arrays.asList(arr2);list2.add(4);System.out.println(list2);这时候,一运行,又报错了!
java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at ListTest.test2(ListTest.java:30)ListTest.java:30 是代码中的 list2.add(4);
原因:
Java业务开发常见错误

文章插图
 

Java业务开发常见错误

文章插图
 

Java业务开发常见错误

文章插图
 
发现:Arrays.asList返回的List并不是java.util.ArrayList,而是Arrays内部类ArrayList,它没有覆写父类的add方法,所以调用会报错 。
解决:
重新new一个ArrayList初始化Arrays.asList返回的List即可 。
Integer[] arr2= {1, 2, 3};List list2 = Arrays.asList(arr2);ArrayList list3 = new ArrayList(list2);list3.add(4);System.out.println(list3);总结:Arrays.asList返回的List不支持增删操作 。
3)错误三Integer[] arr2= {1, 2, 3};List list2 = Arrays.asList(arr2);arr2[1] = 6;System.out.println(list2);日志:
[1, 6, 3]发现:对原始数组的修改影响到了我们获得的那个List 。
解决:
重新new一个ArrayList初始化Arrays.asList返回的List即可 。
Integer[] arr2= {1, 2, 3};ArrayList list3 = new ArrayList(Arrays.asList(arr2));arr2[1] = 6;System.out.println(list3);日志:
[1, 2, 3]总结:对原始数组的修改影响到了我们获得的那个List 。
三、日志记录常见问题四、Java8常见使用1)Lambda表达式1、目的
Lambda表达式的初衷是进一步简化匿名类的语法 。
2、简单实例
//匿名类new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello1");}}).start();//lambda表达式new Thread(() -> System.out.println("hello1")).start();
在idea中快捷键:Alt + Enter 会看到提示,自动转成lambda表达式
Java业务开发常见错误

文章插图
 
2)Stream操作1、功能说明可以对集合进行投影,转换,过滤,排序等操作 。
2、准备工作创建四个实体类,用于下方Demo的使用 。
Java业务开发常见错误

文章插图
 

Java业务开发常见错误

文章插图
 

Java业务开发常见错误

文章插图
 
3、创建流3、创建流创建流程一般有五种方式 。
ream方法把List或数组转换成流
/** * list ==> 流 */List<String> list = Arrays.asList("a1", "a2", "a3");list.stream().forEach(System.out::println);/** * 数组 ==> 流 */Arrays.stream(new int[]{1, 2, 3}).forEach(System.out::println);b.通过stream.of方法直接传入多个元素构成一个流程
String[] arr = {"a", "b", "c"};Stream.of(arr).forEach(System.out::println);Stream.of("a", "b", "c").forEach(System.out::println);Stream.of(1, 2, "a").forEach(System.out::println);c.通过Stream.iterate方法使用迭代的方式构造一个无限流,然后使用limit限制流元素个数


推荐阅读