在写代码调试时,发生
空指针异常,定位代码是在使用
stream()的findAny()出
报错,后发现是因为结果中存在null的数据,导致可
空指针,findFirst()也是如此;
所以使用前先去空
我整理的一些关于【API】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/xltfovJava Stream处理List时考虑空元素
在现代Java编程中,Stream API是一个非常强大而灵活的工具,用于处理集合数据,比如List。利用Stream API,我们可以以更简...
java8 stream findfirst().get()空指针
List<Integer> a = Arrays.asList(1, 2, 3);
Integer b = a.stream().filter(x -> x.equals(4)).findFirst().get();
System.out.println(b);
Exception in thread “main” java.util.NoSuchElementException:
java.lang.NullPointerException
atjava.util.stream.Collectors.lambda$groupingBy$45(Collectors.java:907)
atjava.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
atjava.util.ArrayList$ArrayListSpliterator.forEachRemain...
将下面代码进行优化,使用Stream流处理 List<PtmItemVo> ptmItemVoList = baseMapper.selectVoList(wrapper); List<PtmItemVo> list = new ArrayList<>(); for (PtmItemVo item : ptmItemVoList) { if ("dwgc".equals(item.getType())) { List<PtmItemVo> zdwgcList = findListByParentId(item.getId()); for (PtmItemVo zdwgcEntity : zdwgcList) { if ("zdwgc".equals(zdwgcEntity.getType())) { list.add(zdwgcEntity); } else if (!list.contains(item)) { list.add(item); } } } }
这个需求很简单,映射到数据库中可以这样查询:
SELECT name FROM tbl_fishes WHERE kind = 'grass carp' AND weight 2
这条SQL语句简单明了,剩下的就交给数据库搞定了,那用
java如何实现呢?
Java 8 API添加了一个新的抽象称为流
Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对
Java 集合运算和表达的高阶抽象。
Stream API可以极大提高
Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处