对于Stream流的谬误应用
前段时间碰到相似这样的代码,短短三行代码,可能会排抛两个异样。(o_o)
list.stream().map(str -> transNewStr(str)) .findFirst() .get();
transNewStr(str)
返回null,执行findFirst
会报空指针,如果findFirst
返回空,get()
会报NoSuchElementException。
正确写法如下:
list.stream().map(str -> transNewStr(str)) .filter(Objects::nonNull) .findFirst() .orElse(null);
对于ArrayList
如果你想当然的去笼罩ArrayList
中的值,预计会写出上面这种蠢代码,这是无奈对值进行笼罩的,执行完后,ArrayList中会有两个元素。起因看下源码就晓得了,插入时,旧元素会后移。
ArrayList<String> list = new ArrayList<>(); list.add(0,"a"); list.add(0,"b");
ps:不要用foreach来remove ArrayList中的元素,用迭代器!