gpt4 book ai didi

java - Stream.count() 导致 NPE

转载 作者:行者123 更新时间:2023-12-02 01:26:17 25 4
gpt4 key购买 nike

我在 Java 流 API 中看到一些奇怪的行为。这是我的代码:

public static void main( String[] args ) {
final List<String> list = Arrays.asList( "string1", "string2" );
final Map<String, List<String>> map = new HashMap<>();
map.put( "string1", Arrays.asList( "1" ) );
//map.put( "string2", Arrays.asList( "1" ) );
Stream<String> stream = list.stream().map( map::get ).flatMap( List::stream );
System.out.println( "Stream=" + stream );
long count = stream.count();
System.out.println( "Stream count=" + count );
}

倒数第二行 (long count = stream.count();) 导致 NPE。如果我为键“string2”(注释代码)添加另一个条目到映射,则不会发生异常。有人可以指出为什么它会导致 NPE 而不是仅仅返回计数为 1 吗?

如果我尝试将流的结果收集到列表中而不是调用 count()

,则会观察到相同的行为

最佳答案

您的代码将在 flatMap 中对 null 调用 List#stream,这会导致 NullPointerException。您需要在 flatMap 之前过滤掉 null 值:

list.stream()
.map(map::get)
.filter(Objects::nonNull)
.flatMap(List::stream)

关于java - Stream.count() 导致 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74543455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com