一、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
为什么打印出来的,不是我们想要的?
文章插图
可以看到入参是泛型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);原因:
文章插图
文章插图
文章插图
发现: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表达式
文章插图
2)Stream操作1、功能说明可以对集合进行投影,转换,过滤,排序等操作 。
2、准备工作创建四个实体类,用于下方Demo的使用 。
文章插图
文章插图
文章插图
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限制流元素个数
推荐阅读
- JAVA 基础核心面试问题分析,看懂了轻
- 20条JavaScript代码简洁的写法
- 程序的执行流程和开发工具介绍
- 作为Android开发,这个知识点一定要知道,官方也改了 2 次
- Java与Lua相互调用
- Java 之任务调度框架
- JAVA并发之ReentrantLock原理解析
- 前端开发干货:让 iframe 焕发新生开发
- Java基础系列-final、finally关键字
- 前端新手必备常用JavaScript方法函数大全